dポイントプレゼントキャンペーン実施中!

VS.NET2005のC#からVC++6.0で作成したDLLを呼び出しています。
VCのデバッガでデバッグしてみると呼び出した関数は正常に動作しているようなのですが、最後のreturnを実行しC#に戻るところでエラーが出てしまいます。
C#側では「'System.ExecutionEngineException' のハンドルされていない例外が ConsoleApplication1.exe で発生しました。」となります。

C#での宣言は、
[DllImport("test.dll")]
public static extern uint TestFunc(ref byte[] moji, ref uint nagasa);
です。

VC++の宣言は、
__declspec(dllexport) unsigned long __stdcall TestFunc(unsigned char* moji, unsigned long* nagasa)
です。

C#へ値を返さない関数は問題ないのですが、値を返そうとすると起きるようです。不備などあればご指摘いただけないでしょうか。
ちなみにVB6からは問題なく動作できました。

A 回答 (1件)

C#側とC++側の宣言が食い違っていますよ


C#側で
public static extern uint TestFunc(ref byte[] moji, ref uint nagasa);
としているので mojiは C++の受けが unsigned char** として受けないといけないかと

C++側を基準にするなら
public static extern uint TestFunc(byte[] moji, ref uint nagasa);
として mojiに対してのrefが不要に思います

C++側でmojiの内容を変更しているのだとすると間違った領域を変更していそうです
    • good
    • 0
この回答へのお礼

早速試してみたところ上手くいきました!!
ずーっと悩んでいたので非常に助かりました。
なるほどunsigned char*にはrefは必要ないのですね・・・てっきり戻りにはrefが必要なのかと思っていました。すごく勉強させていただきました。本当にありがとうございました。

お礼日時:2009/04/05 02:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!