2011-01-27 16 views
1

からロード:C++の関数のDLLでエクスポートし、C#

無効__declspec(のdllexport)のfoo(HWNDのWND)

そして、C#で

[DllImport("MyDll.dll", CharSet = CharSet.Ansi)] 
public static extern void foo(IntPtr wnd); 

私はこのエラーが発生しました - 追加情報: foo 'をDLLに入れます。私は、DLLを検査しようとした私は、休閑の定義と機能を持っている:

非装飾C++機能: 無効CDECL fooの(構造体HWND *)

、私はいくつかのフォーラムで検索している、これがあると思われますこれを行う正しい方法...なぜこのランタイムエラーがあるのか​​分かりますか?

+0

私の質問をチェックしてください。多分助けてください! http://stackoverflow.com/q/4108181/375958 – Jalal

答えて

4

C++ネームマングリングを無効にする必要があります。

extern "C" __declspec(dllexport) void foo(HWND wnd) 

あなたにもDLLのエクスポートを参照してくださいDUMPBIN.EXEユーティリティを使用することができます。このようなあなたのネイティブ関数を宣言します。

+0

ありがとうございます!私は11分で答えを受け入れるでしょう:P – Felics

+0

+1。あなたがそれを変更できる限り、これは行く方法です。 –

+0

喜んで助けてください。そして、もしあなたがソースを持っていなければ、もう少し苦痛を感じますが、あなたがそうしているので、私は今それについて心配しません。しかし、私は "C++ name mangling"を調べるだけで、実際にここで何が起こっているのか知ることができます。ソースを編集することができない場合には、あなたの回答Adamを削除しないでください。 –

関連する問題