January 22, 2012
On Sun, Jan 22, 2012, at 01:13 PM, Mars wrote:
> On Sunday, 22 January 2012 at 10:21:29 UTC, DNewbie wrote:
> > I've took a look at MySQL headers, the functions use   stdcall, but in libmysql.dll exports table they are not decorated.
> 
> This means...?
> Shouldn't it at least compile, if they are listed in the def
> file, coming from the lib?
> 

You should add 'extern(Windows)', but it would not work anyway.
Can someone confirm the oplink does not handle this type of module (undecorated stdcall functions)?


January 22, 2012
The way I did it is
1) Download C connector from mysql's website, 6.0.2 is version headers were made for. Remember you'll need the 32-bit one if you're using DMD on Windows.
2) Create the binding functions using extern(System).
3) For Windows, use 'coffimplib libmysql.dll libmysql.lib', and build with "PathToFile/libmysql.lib". Example: 'dmd test.d libmysql.lib'
3b) For Linux, just link to libmysqlclient. a with -L"libmysqlclient.a" or by just passing path.
4) Make sure that libmysql.dll (for Windows) is in the application folder otherwise you'll get errors when trying to run.

On 21/01/2012 3:38 PM, Mars wrote:
> Hello everyone.
> I've been trying to use MySQL in an application on Windows, but I always
> get
>> Symbol Undefined _mysql_init
> I've put the lib in the correct folder, so I don't know what the problem
> might be. I've tried several libs, and tried to compile it myself
> (always converted using coffimplib), but it fails, no matter what. I've
> also tried to make a def file out of the lib, and the functions are
> definitly listed as exports there.
> Any idea what I might doing wrong?
>
> Mars

January 23, 2012
On Sunday, 22 January 2012 at 23:23:23 UTC, Kapps wrote:
> 2) Create the binding functions using extern(System).

Oh man... that was the problem. The file I used was using extern(C). Thought that was okay, it's a C lib after all. Thank you!

Mars
January 24, 2012
On 1/23/2012 11:29 AM, Mars wrote:
> On Sunday, 22 January 2012 at 23:23:23 UTC, Kapps wrote:
>> 2) Create the binding functions using extern(System).
>
> Oh man... that was the problem. The file I used was using extern(C).
> Thought that was okay, it's a C lib after all. Thank you!
>
> Mars

A number of libraries on Windows use a different calling convention. Any functions declared WINAPI or PASCAL in the C headers need to be declared either extern(Windows) or, if cross-platform, extern(System).
1 2
Next ›   Last »