カードリーダーとやりとりするC++ DLLがあります。データ構造体へのポインタが必要ですが、これは問題ありません。しかし、C#でDLLと対話しようとすると、私はあらゆる種類の問題を抱えています。保護されたメモリへの書き込みエラー、getDataコマンドの実行後にシャットダウンしたアプリケーションなどマーシャリングの問題
ヘッダvoid readCard(cardData* dataBuffer);
C#コードから
C++方法IもMarshal.StructureToPtrを使用してのIntPtrとしてcardDataを通過しようとした
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);
、その返されたときにptrを構造体Marshal.PtrToStructureに読み込もうとしたときにデータを返さなかった...
多くの人々がC/C++ DLLを使って作業しようとしているようだから、ヘルプファイルやその他の投稿を使ってこれを解決しようとしています。私はC++ですべてのことを書こうとしていて、C++ DLLで解析されたデータで文字列を返すようにしようとしましたが、保護されたメモリエラーに読み書きをスローします。
構造体のC++定義を表示できますか?私はマッピングに何か間違っていると思います... –