2013-03-07 108 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進一步瞭解調用約定: