我制作了一个 dll 并使用导出了其中的函数
_declspec(dllexport)
在函数定义的最左边。
喜欢:
_declspec(dllexport) void func1(char*p);
这是将函数导出为某处的正确方法吗?
我读过关于 _stdcall
的内容,例如:
_declspec(dllexport) void _stdcall func1(char*p);
或
_declspec(dllexport) void _cdecl func1(char*p);
请解释这三者的区别,我很困惑。
最佳答案
您的第一个签名是正确的。第二个和第三个也是。但是,_stdcall
和 _cdecl
是调用约定,它们指定调用堆栈中参数的顺序以及调用时的一些其他内容。例如,'_thiscall' 是另一个调用约定,这意味着 this
指针将在函数调用期间通过寄存器(ECX)传递。
因此,简而言之,这三者都可以工作,但是这三者都指定了一些关于如何进行调用的内部细节。
您可能需要阅读 this article了解有关调用约定的更多信息:
关于c - dll中的导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15265187/