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); 

私は混乱しているので、これら3つの違いを説明してください。

4

2 に答える 2

1

あなたの最初の署名は正しいです。2番目と3番目も同様です。ただし、呼び出しが行われている間、呼び出しスタック内のパラメーターの順序やその他のものを指定する呼び出し規則があります_stdcall_cdeclたとえば、'_thiscall' は別の呼び出し規約であり、this関数の呼び出し中にポインターがレジスター (ECX) を介して渡されることを意味します。

したがって、要するに 3 つすべてが機能しますが、3 つすべてが呼び出し方法の内部詳細を指定します。

呼び出し規約について詳しく知るには、次の記事を読む必要があるかもしれません。

于 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 に答える