我正在尝试创建.lib文件以使用外部.dll,以便我们可以针对它编译代码(VS2010)。在这个外部库中,函数是使用__stdcall声明的,它们没有指定__declspec(dllimport)。例如:
extern "C"
{
int __stdcall exampleFunction(int firstArgument);
}
我尝试了以下内容:
创建.def文件,如下所示:
EXPORTS
method_1
method_1@16 @1 ; ordinal from dumpbin
...
然后从此
创建.liblib /MACHINE:x86 /def:my_def_file.def OUT:my_library.lib
代码链接正常但在首次从dll调用方法时抛出“Privileged Instruction”异常。
如此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
我全都是为了和平与爱,但我有点被困,它让我疯狂,任何上述任何一种方法的帮助都会受到赞赏!