1

我正在尝试创建一个 .lib 文件以与外部 .dll 一起使用,以便我们可以针对它编译代码(VS2010)。在这个外部库函数中使用 __stdcall 声明,它们没有指定 __declspec(dllimport)。例子:

extern "C"
{
    int __stdcall exampleFunction(int firstArgument);
}

我尝试了以下方法:

从 .def 创建 .lib

创建一个 .def 文件,如下所示:

EXPORTS
method_1
method_1@16    @1 ; ordinal from dumpbin
...

然后从此创建 .lib

lib /MACHINE:x86 /def:my_def_file.def OUT:my_library.lib

代码链接正常,但在首次从 dll 调用方法时抛出“特权指令”异常。

从 .obj 创建 .lib

如本kb中所述,另一种可能性是创建一组存根函数,将它们编译成 .obj 文件并从中创建 .lib。然而,我什至无法让 kb 页面上的示例正常工作,例如

// my_library.cpp
extern "C" __declspec(dllexport) void _stdcall Function(void) {}

当我在这个文件上运行所需的命令时:

CL /c /Ob0 my_library.cpp
lib /def:my_library.obj /MACHINE:x86

然后打开 my_library.obj 确实显示字符串“_Function@0”,正如预期的那样,但 my_library.lib 没有显示任何痕迹。此外,在运行 lib 命令时,我会收到一些时髦的警告消息:

hasp_api.obj : warning LNK4017: L☺♥ statement not supported for the target platform; gnored
hasp_api.obj : warning LNK4017: ► statement not supported for the target platform; ignored

我完全是为了和平与爱,但我有点卡住了,这让我发疯了,对上述任何一种方法的任何帮助都将不胜感激!

4

0 回答 0