1

我制作了一个 dll 并使用 _declspec(dllexport)函数定义的最左侧导出了其中的函数。像 :

_declspec(dllexport) void func1(char*p);

这是将函数导出到某处的正确方法吗?

我读过_stdcall类似的内容:

_declspec(dllexport) void _stdcall func1(char*p);

或者

_declspec(dllexport) void _cdecl func1(char*p); 

请解释这三个之间的区别,因为我很困惑。

4

2 回答 2

1

你的第一个签名是正确的。第二个和第三个也是如此。但是,_stdcall并且_cdecl是调用约定,它指定调用堆栈中参数的顺序以及进行调用时的其他一些事情。例如,'_thiscall' 是另一个调用约定,这意味着this在函数调用期间指针将通过寄存器(ECX)传递。

因此,简而言之,这三个都可以工作,但所有三个都指定了如何进行调用的一些内部细节。

您可能需要阅读本文以了解有关调用约定的更多信息:

于 2013-03-07T07:18:00.717 回答
0

您的所有声明都是正确的。重要的是您为使用您的 DLL 的调用模块提供适当的头文件。例如其中之一

_declspec(dllimport) void func1(char*p);
_declspec(dllimport) void _stdcall func1(char*p);

或者

_declspec(dllimport) void _cdecl func1(char*p); 
于 2013-03-07T07:21:44.963 回答