C++のDLLを作ったところ、ポインタ引数はちゃんと値が渡されますが、配列は上手くいきません。
何が問題でしょうか。
C++ DLL ソース
extern "C" DllExport void __stdcall Get(UINT8* aa, UINT8* data); static UINT8 datadd[8]; void __stdcall GetJ1939Frame(UINT8* aa,UINT8* data){ datadd[1] = 0xaa; datadd[7] = 0xff; *aa = 0xff; data = datadd; } コード
C#ソース
DLLimpo.Get(&aa, data); tBox_rcv_Para0.Text = Convert.ToString(aa); tBox_rcv_Para1.Text = Convert.ToString(data[1]); tBox_rcv_Para2.Text = Convert.ToString(data[7]); [DllImport("IXXAT_API_ver1.0.0.dll", CallingConvention = CallingConvention.StdCall)] public static extern void Get(byte * aa,[Out]byte[] data);
アドバイスお願いします。
Zuishinさんのご指摘のように、GetJ1939Frame()はそもそもC言語ベースで正しく(質問者さんの意図通りに)動きません。それを直すのが先決です。また、質問文中のC#ソースでaaとdataの型が分からないので、省略せずに前後のコードを提示してください。
Zuishinさん>>Bufferを外に取り出しました。bufferはもともと外にあったので、ここでの誤記入です。
capra314さん>>エラーは起こりません。C#のbuffer Watcherでは”0”の値になっています。
dodox86さん>>aaとdataの型でDLL Import宣言に byte*とbyte[]になっているじゃないですか。
Getからデータを貰ってText Boxに表示するだけのソースですよ?
ちなみにaaは問題なく、データを貰えます。問題は配列のみです。
回答1件
あなたの回答
tips
プレビュー