自作DLL(MyDLL.dll)の関数を呼び出してみた

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

自作DLL(MyDLL.dll)の関数を呼び出してみた

投稿記事 by naohiro19 » 9年前

MyDLL.dllにはAdd/Sub/Mul/Divの4つが実装されています。
C++側
► スポイラーを表示
Dependency Walkerで関数が存在していることを表しています。
[album]955[/album]

C#側
► スポイラーを表示
なお、アンマネージDLLの呼び出しにはDllImportちゃんどいて!そいつ読み込めない!のUnManagedDllクラスを使っています。
C#でMyDLL.dllを動かすにはbinフォルダのDebugフォルダまたはReleaseフォルダに入れる必要があります。
[hr]
  • 2015/8/16 - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] を追加しました。
最後に編集したユーザー naohiro19 on 2015年8月16日(日) 08:31 [ 編集 3 回目 ]

YuO
記事: 947
登録日時: 14年前

Re: 自作DLL(MyDLL.dll)の関数を呼び出してみた

投稿記事 by YuO » 9年前

これ,正しく動作していますか。
「正しく」には,呼び出し後のアンマネージスタックの状態を含みます。

見たところ,C++側の呼び出し規約がcdeclでC#側のマーシャリング後の呼び出し規約がstdcallなので,アンマネージスタックが不正な状態になるようにしか思えないのですが。
C++側の呼び出し規約を,DLLで一般的なstdcall (通常はWINAPIで修飾) にするか,C#側のデリゲートにUnmanagedFunctionPointer属性を追加する必要があるように思います。