0

我在 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 ...)

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

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


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

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

4

1 回答 1

0

没关系..

我之前也尝试过使用coffimplib但没有成功,但现在可以了。不知道我之前做了什么。

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

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

于 2011-07-31T12:14:03.750 回答