2013-03-07 97 views
1

我已经做了一个dll,并在其中使用 _declspec(dllexport)函数定义的最左端导出功能。 like:导出功能在dll

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

这是正确的方法来导出功能的某个地方?

我看了一下_stdcall像:

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

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

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

回答

0

你的所有声明都是正确的。重要的是你为使用你的DLL的调用模块提供了一个合适的头文件。例如的

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

_declspec(dllimport) void _cdecl func1(char*p); 
一个
1

您的第一个签名是正确的。第二和第三也是如此。但是,_stdcall_cdecl是调用约定,它们指定调用堆栈中的参数排序以及调用时的其他一些内容。例如,'_thiscall'是另一种调用约定,这意味着在函数调用期间将通过寄存器(ECX)传递指针this

所以,简而言之,所有这三项都将起作用,但所有三项都规定了如何进行呼叫的一些内部细节。

你可能需要阅读this article进一步了解调用约定: