使用存根函数创建C ++对象文件库(.lib)

时间:2012-09-28 16:56:18

标签: c++ visual-studio-2010 dll

我正在尝试创建.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调用方法时抛出“Privileged Instruction”异常。

从.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

我全都是为了和平与爱,但我有点被困,它让我疯狂,任何上述任何一种方法的帮助都会受到赞赏!

0 个答案:

没有答案