将C标头转换为D时出现问题

sim*_*sjo 4 c mysql d

我正在尝试将MySql C连接器6.02标头转换为D,但是我遇到了一些奇怪的崩溃.我的猜测是我在翻译结构或函数方面犯了一些错误(我不太擅长C).

我在libmysql.dll上使用了implib/system来创建一个lib文件.

我无法让htod.exe工作.使用-hs(包括系统文件)抱怨它无法找到系统文件.

Coffimplib.exe没有选项将_添加到导出的内部名称.

我找不到免费版的coff2omf.

mysql.d是包装器.我在每个包装定义之前都包含了C定义,以便更容易发现错误.该文件也包含mysql DLL和转换后的libfile.

编译mytest_fails.d时崩溃了.mytest_works.d只有一个断言,这使它工作..使用-release编译mytest_works也会导致崩溃.

我一直在使用dmd 2.051

从share1t.com下载mytest.zip

更新:我还在D.learn新闻组上询问了一些有关此问题的问题,但我认为没有人通过这些代码.

And*_*vić 5

stdcall是一个Windows函数调用约定(与C调用约定非常不同).HTOD无法使用extern标记多个函数(Windows).这是正常的,因为HTOD没有配备处理宏(STDCALL定义为宏,我可以从msyql.d中的剩余注释中看到).

这是一个更新的mysql.d文件:http://dl.dropbox.com/u/9218759/mysql.d

现在,您需要OMF格式的正确导入库.我通常建议您不要使用implib.我有几个问题,其他人报告说使用它有问题.使用coffimplib是要走的路.但首先,您需要一个COFF导入库.

如果需要,可以从这里下载带有COFF导入库的Mysql版本:http://dev.mysql.com/downloads/mirror.php?id = 379777 #mirrors (标识为Visual Studio的DLL形式的库通常带有COFF导入库).

但我在这里为您提供OMF格式的翻译COFF导入库:http://dl.dropbox.com/u/9218759/libmysql.lib

我已经尝试了两个测试用例,现在它们似乎都运行良好.如果出现问题,请尝试再次检查已翻译的头文件(mysql.d),我可能错过了正确指定所有调用约定.