カード リーダーと対話する C++ DLL があります。データ構造体へのポインターが必要ですが、これは問題ではありません。ただし、C# で DLL を操作しようとすると、さまざまな問題が発生します。保護されたメモリへの書き込みエラー、getData コマンドの実行後にアプリケーションがシャットダウンするなど。
ヘッダーからの C++ メソッド
void readCard(cardData* dataBuffer);
C# コード
Wrapper.cs
public struct cardData{
Byte[] data01;
Byte[] data02;
}
[dllImport("card.dll")]
public static extern void readCard(ref cardData data);
form1.cs
Wrapper.cardData tmpData = new wrapper.cardData();
tmpData.data01 = new Byte[];
tmpData.data02 = new Byte[];
readCard(ref tmpData);
また、Marshal.StructureToPtr を使用して cardData を IntPtr として渡そうとしましたが、返されたときに ptr を構造体 Marshal.PtrToStructure に読み込もうとしたときにデータが返されませんでした...
多くの人が C/C++ DLL を操作しようとして問題を抱えているように見えるため、ヘルプ ファイルや他の投稿を使用してこれを解決しようとしています。私はすべてをC++で書き込もうとし、C++ DLLで解析されたデータを含む文字列を返そうとしましたが、保護されたメモリへの読み取り/書き込みエラーがスローされます