Thank to jwhear on irc who solved it for me despite claiming not to be a pyd guru.

In case it's of benefit, here is what works:

module hellostruct;

import pyd.pyd;
import std.stdio;
import std.conv;

struct t_mystruct {
  int i;
  string s;
};

t_mystruct hellostruct(int[] inp) {
    int i;
    t_mystruct mystruct;

    for (i=0;i<inp.length;i++)
    {
writefln("inp " ~ to!string(i) ~ " is " ~ to!string(inp[i]));
    }
    writefln(" * ok, bye");
    mystruct.i=99;
    mystruct.s="hello there";
    return mystruct;
}

extern(C) void PydMain() {
    def!(hellostruct)();
    module_init();
    wrap_struct!(
      t_mystruct,
      Member!"s",
      Member!"i"
    )();
}

[root@fedora demark]# cat test.py
import os.path, sys
import distutils.util

# Append the directory in which the binaries were placed to Python's sys.path,
# then import the D DLL.
libDir = os.path.join('build', 'lib.%s-%s' % (
    distutils.util.get_platform(),
    '.'.join(str(v) for v in sys.version_info[:2])
))
sys.path.append(os.path.abspath(libDir))

import hellostruct
inp=[1,2,3,4]
mystruct= hellostruct.hellostruct(inp)
print mystruct.i
print mystruct.s

Reply via email to