私はソースコードを持たないサードパーティのC++ DLLを読み込むVS 2015 MVC C#Webアプリケーションで作業しています。 DLLには入力パラメータが必要です。新しい仕様では、2つの配列メンバーが必要です。 1つはint
アレイであり、もう1つはchar
アレイです。C#:安全でない構造体のメンバ配列を設定する方法
私のC#の構造体は、8ビットのC++文字に一致するようにbyte
として意図char
配列を定義しています
[StructLayout(LayoutKind.Sequential)]
public unsafe struct MyDLLInput
{
public fixed int SomeList[288];
public fixed byte PathToData[256];
};
構造体は、私には正しいようだが、今、私は値を設定する必要があると私は持っていませんよ任意の成功。 - 脇ローカルIを使用して値を設定する適切な方法から
Fixed size buffers can only be accessed through locals or fields.
ここで起こって物事のカップルは、少なくともあります。私は、次のエラーを取得しています両方のメンバーアレイの
MyDLLInput dllInput = new MyDLLInput()
{
SomeList = new int[] {0,12,33,67,93},
PathToData = "C:\\some\\path\\to\\data"
}
// Call 3rd Party DLL
MyDLLOutput = MyDLL.EntryPoint(MyDLLInput);
string
からbyte[]
へのエンコーディング変換も行わなければなりません。
誰かに、これらの値を設定するためのきれいな方法のコード例を私に提供することはできますか?
安全でないブロックで固定フィールドをインスタンス化する必要があります。 – igorushi
Encoding.GetBytesは、2番目の問題を解決します。https://msdn.microsoft.com/en-us/library/ds4kkd55(v=vs.110).aspx – igorushi