Замена файла ядра DMD.lib для включения отсутствующих функций - PullRequest
0 голосов
/ 31 июля 2011

Я использую dmd 2.054 и optlink 8.00.12 в Windows 7.

Следующая программа:

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 и implib, созданный для LocalFree, видно, что есть различия, но я не уверен, что это значит (некоторые специальные символы отсутствуют в этом выводе)

---------- 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 голосов
/ 31 июля 2011

Nevermind ..

Я также пытался использовать coffimplib ранее безуспешно, но теперь это работает.Понятия не имею, что я делал раньше.

Поэтому мое решение состояло в том, чтобы загрузить Windows SDK и использовать coffimplib в нужных мне библиотеках.

Извините за спам.Если кто-нибудь скажет мне, почему implib не работает, я приму этот ответ.

...