我已经创建了一个dll并使用它导出了其中的函数
_declspec(dllexport)
位于函数定义的最左侧。
喜欢:
_declspec(dllexport) void func1(char*p);
这是将函数导出到某个地方的正确方法吗?
我已阅读过关于_stdcall
的信息:
_declspec(dllexport) void _stdcall func1(char*p);
或
_declspec(dllexport) void _cdecl func1(char*p);
请解释这三者之间的区别,因为我很困惑。
答案 0 :(得分:1)
您的第一个签名是正确的。第二和第三是如此。但是,_stdcall
和_cdecl
是调用约定,它们在调用时指定参数的顺序以及调用时的其他一些事项。例如,'_thiscall'是另一个调用约定,这意味着this
指针将在函数调用期间通过寄存器(ECX)传递。
因此,简而言之,这三项都有效,但三者都指明了如何进行通话的内部细节。
您可能需要阅读this article以了解有关通话约定的更多信息:
答案 1 :(得分:0)
你的所有声明都是正确的。重要的是,您为使用DLL的调用模块提供了适当的头文件。例如
之一_declspec(dllimport) void func1(char*p);
_declspec(dllimport) void _stdcall func1(char*p);
或
_declspec(dllimport) void _cdecl func1(char*p);