![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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からは問題なく動作できました。
No.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の内容を変更しているのだとすると間違った領域を変更していそうです
早速試してみたところ上手くいきました!!
ずーっと悩んでいたので非常に助かりました。
なるほどunsigned char*にはrefは必要ないのですね・・・てっきり戻りにはrefが必要なのかと思っていました。すごく勉強させていただきました。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
vc++ 2005 Pictureboxの透過処理
-
コンボボックスを使う時の警告
-
ボタンの複数割り当てについて
-
【java】座標の値をテキストフ...
-
C# visibleプロパティをfalseに...
-
数独の問題作成
-
アプレットでマウスイベントが...
-
マウスイベント処理
-
JWindow、JFrameでモーダル化の...
-
Form2のテキストボックスを更新...
-
C#でのDLLのメソッドの作り方
-
javaで質問です。 文字列2023/2...
-
[JAVA]try 内の変数を外で!?
-
オブジェクトの中のプロパティ...
-
変数を動的に利用するには?
-
byte型のマイナスの扱いについて
-
配列にnullを代入すると、null...
-
System.err. printlnとSystem.o...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
ボタンの複数割り当てについて
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# visibleプロパティをfalseに...
-
ボタンのイベントで異なるウィ...
-
C# DataGridView列カスタマイズ
-
C# 矢印キーの取得
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#で別のFormへ複数の値を返そ...
-
C# WinForm のDataGridView Cel...
-
テキストフィールドに入力した...
-
【C#】ソースコードをファイル...
-
C#から、C++で作成したdll内の...
-
C# 半角カナの文字化けについて
-
C# タスクバーを隠したフォーム...
-
文字列の置換
-
エンターキーを押すとOKボタン...
おすすめ情報