替换DMD的kernel32.lib以包含缺少的函数

时间:2011-07-31 12:04:17

标签: windows d dmd

我在Windows 7上使用dmd 2.054和optlink 8.00.12。

以下计划:

pragma(lib, "kernel32.lib");
extern(Windows) {
    uint LocaleNameToLCID(const(wchar)*, int);
}

void main() {
    auto us = LocaleNameToLCID("en-US", 0);
}

编译时出错:

 Error 42: Symbol Undefined _LocaleNameToLCID@8

但是如果我尝试替换kernel32.lib,我会遇到很多错误:

implib /system kernel32.lib \Windows\system32\kernel32.dll

 Error 42: Symbol Undefined _LocaleNameToLCID@8
c:\dmd\windows\bin\..\lib\phobos.lib(dmain2)
 Error 42: Symbol Undefined _LocalFree@4
c:\dmd\windows\bin\..\lib\phobos.lib(dmain2)
(... snip ...)

查看原始库和为LocalFree创建的implib显示存在差异,但我不确定这意味着什么(此输出中缺少某些特殊字符)

---------- IMPLIB
    LocalFree
_LocalFreekernel32.dll  LocalFree
_K32GetPerformanceInfo!_LocalFree!Z
_MoveFileExA!É_QueryPerformanceCounter!c_ReadConsoleOutputA!Ó
_LocalFreeZ


---------- DMD'S
    LocalFree
_LocalFree@4KERNEL32.dll    LocalFree
_LocalFree@4}

知道如何在我的程序中使用新的kernel32.lib以避免丢失符号吗?

1 个答案:

答案 0 :(得分:0)

没关系..

我之前尝试过使用coffimplib但没有成功,但现在它可行。不知道我早些时候做过什么。

所以我的解决方案是下载windows sdk并在我需要的库上使用coffimplib

抱歉垃圾邮件。如果有人能告诉我为什么implib不起作用,我会接受这个答案。

相关问题