繁体   English   中英

外部“ C”无法正常工作

[英]extern “C” not working as expected

我试图钩住Win32 API函数。 我正在制作一个要从中导出功能的DLL,但是我已经在基础知识上失败了。 我的声明如下:

extern "C" __declspec(dllexport) int WINAPI fnTest(void);

但是导出的函数名称不是“ fnTest”(正如我期望的那样),而是“ _fnTest @ 0”。 我只能在将函数调用约定声明为__cdecl时使它起作用,这将导致导出的名称为“ fnTest”,但是由于Win32调用WINAPI/__stdcallWINAPI/__stdcall因此这不是一个选择。

我正在使用VS2010。 提前致谢。

这种修改是__stdcall约定的一部分。 由于被调用函数有责任在返回时从堆栈中删除参数,并且从堆栈中删除错误数量的数据会造成灾难性的后果,因此,将参数占用的字节数简单地附加到函数名后的“ @”后面即可。让链接器捕获潜在的冲突定义错误。

您能确切解释一下,这怎么引起问题?

您应该使用模块定义文件(.def)而不是__declspec(dllexport)
只需使用以下.def文件:

EXPORTS
fnTest

如果要执行此操作,则必须使用.DEF文件按序而不是按名称导出函数

stdcall提供了一种修饰,用于描述参数的长度,在这种情况下为@0因为您没有参数。 如果您有一个参数,则为@4 ,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM