Bill Baxter Wrote: > On Fri, Feb 13, 2009 at 5:00 AM, Eldar Insafutdinov > <[email protected]> wrote: > > Bill Baxter Wrote: > > > >> On Fri, Feb 13, 2009 at 4:22 AM, Eldar Insafutdinov > >> <[email protected]> wrote: > >> > Can somebody help me with exporting functions from a DLL? I am defining > >> > functions in C++ like > >> > extern "C" __declspec(dllexport) void* > >> > __qtd_QObject_QObject_QObject(args) > >> > After compiling a DLL with MINGW and producing a lib file for it with > >> > implib I am trying to use them from D. > >> > In D I declare them as > >> > extern (C) void* __qtd_QObject_QObject_QObject(args); > >> > And then compile it and link it to the .lib file made by implib for that > >> > DLL, but optlink complains that symbol is undefined. I tried to use that > >> > Cfunction from C++ and it worked. What I can do? > >> > > >> > >> What's the implib command you're using? Often you need to use the /system > >> flag. > >> > >> --bb > > > > okay, second problem then - I need to be able to call extern (C) functions > > defined in D code from DLL. I tried to do getProcAddress(NULL, > > "__some_D_func"); > > but this doesn't work. > > I think you may have to write some code to explicitly register your D > functions with the DLL. > You could write a mini getDCodeProcAddress kind of thing in your D > code. Then give a pointer to that function to the C code in the DLL > at startup. Then C code uses getDCodeProcAddress from there. > > Maybe there's an easier way, but that's what I'd try. > > --bb
This way won't really work because there are dozens of such a functions - that's for virtual dispatch. I have just solved it by declaring functions "export extern (C)" and adding "_" prefix to function name when calling GetProcAddress. So technically there are no issues to make qtd working on windows!
