On Thu, 12 Feb 2009 15:48:07 -0500, Eldar Insafutdinov <e.insafutdi...@gmail.com> wrote:
>Bill Baxter Wrote: > >> On Fri, Feb 13, 2009 at 5:00 AM, Eldar Insafutdinov >> <e.insafutdi...@gmail.com> wrote: >> > Bill Baxter Wrote: >> > >> >> On Fri, Feb 13, 2009 at 4:22 AM, Eldar Insafutdinov >> >> <e.insafutdi...@gmail.com> 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! You are a genius! ;)