• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コールバック関数 再び)

コールバック関数 再び

このQ&Aのポイント
  • C++で作られたDLLを利用し、コールバック関数が終了してしまう現象についての質問です。
  • DLL自体は問題ないと思われるが、コールバック関数での装置からの送信時に終了してしまいます。
  • 質問者はDLLを使う際に、初期設定用の関数と通信開始用の関数を利用しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>このDLLを使った、他のアプリで動作確認は取れているのでDLL自体には問題ない そのアプリのコードは持っています? 考えるよりコンバートの方が、だいぶ手間がありません。 それができないなら、考えるしかないので、一応書きます。 [BYTE *data] => [ByVal data As IntPtr] という変換をしていますよね。 「data」に渡すための変数値のアドレスをIntPtrオブジェクトに収め、値渡しをする事が前提の宣言をしています。 その形式を取っていなければ、メモリリークを起こして落ちると思います。 あなたが公開した情報でもできますが、要は使い方次第です。 個人的には、オブジェクトハンドルを意識しないでやりたいのであれば、 [ByRef data As Byte] としたいところです。 http://okweb.jp/kotaeru.php3?q=1565958 ↑ ここでやりましたよね。 その変換で、不都合があるのであれば、補足してください。 ちょっと気になったので追記です。 普通はDLLだけ提供している物に対し、インターフェイスだけの情報というのは考えずらいのですが、、、 各インターフェースのIN/OUTの解説文がありませんか? 私が記した方法は、あくまでマクロ的に「通す」だけのコンバート方法であり、目的を達する方法ではありません。 たとえばAPI:GetProfileString関数のヘルプ http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=GetProfileString+MSDN&num=50 DWORD GetProfileString(  LPCTSTR lpAppName,    // セクション名  LPCTSTR lpKeyName,    // キー名  LPCTSTR lpDefault,    // 既定の文字列  LPTSTR lpReturnedString, // 情報が格納されるバッファ  DWORD nSize        // 情報バッファのサイズ ); 「//コメント」←これ結構大事です。 この情報の意味合いから、利用するたの最適な方法を考えてDeclareで宣言します。 http://okweb.jp/kotaeru.php3?q=1267832 このスレをよく読んでください。私の「お気に入り」です。 インターフェイスを作ることができても、利用する側の渡しでコケる場合もありますので、ご注意を!

que_sera_sera
質問者

お礼

1050YENさん、度々ありがとうございます。 残念ながらコードはありません。 既存のDLLの利用です。 後の情報ですが、I/Oと、各変数の内容でしょうか… とりあえず、もう少し試して見たいと思います。

その他の回答 (1)

回答No.2

BYTE *data, これ「String型」にしてあげたら、どうなります?

que_sera_sera
質問者

お礼

1050YENさん、ありがとうございました。 とりあえず自己解決いたしました。 ちなみにString型にした場合は、 値渡しでは、 「'System.NullReferenceException' のハンドルされていない例外が 不明なモジュールです。 で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。」 が発生。 参照渡しでは、内容的に違うデータが入力されていました。