Thread overview
Re: QtD 0.1 is out!
Feb 12, 2009
Eldar Insafutdinov
Feb 12, 2009
Bill Baxter
Feb 12, 2009
Eldar Insafutdinov
Feb 12, 2009
Eldar Insafutdinov
Feb 12, 2009
Bill Baxter
Feb 13, 2009
Denis Koroskin
February 12, 2009
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?
February 12, 2009
On Fri, Feb 13, 2009 at 4:22 AM, Eldar Insafutdinov <e.insafutdinov@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
February 12, 2009
Bill Baxter Wrote:

> On Fri, Feb 13, 2009 at 4:22 AM, Eldar Insafutdinov <e.insafutdinov@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

Thanks, that helped! I used it without any flags.
February 12, 2009
Bill Baxter Wrote:

> On Fri, Feb 13, 2009 at 4:22 AM, Eldar Insafutdinov <e.insafutdinov@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.

February 12, 2009
On Fri, Feb 13, 2009 at 5:00 AM, Eldar Insafutdinov <e.insafutdinov@gmail.com> wrote:
> Bill Baxter Wrote:
>
>> On Fri, Feb 13, 2009 at 4:22 AM, Eldar Insafutdinov <e.insafutdinov@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
February 13, 2009
On Thu, 12 Feb 2009 22:22:41 +0300, Eldar Insafutdinov <e.insafutdinov@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?


I believe it should be extern extern(C) ...
Otherwise you /declare/ a function with C linkage but provide no implementation so that's why it fails at link time.