我正在尝试将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
更新:我还在D.learn新闻组上询问了一些有关此问题的问题,但我认为没有人通过这些代码.
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),我可能错过了正确指定所有调用约定.