Windows CEプログラムとコンパクトなフレームワーク2.0で、次の構造体をC++からC#にマーシャリングしようとしています。私は文字列のマーシャリングに多くの困難を抱えています。WinCEのC++からc#への構造体のマーシャリング
私はこのC++コードを持っている:
#define Console_Parameters_MAX 50
struct AllParameters {
Parameter Parameters[Console_Parameters_MAX];
} ;
struct Parameter {
int Index;
int Id;
char Value[20];
};
extern "C" {
BOOL GetAllConsoleParameters(AllParameters *pItem);
}
をして、これは、対応するC#のコードです:
[StructLayout(LayoutKind.Sequential)]
public struct AllParameters {
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public Parameter[] Parameters
}
[StructLayout(LayoutKind.Sequential)]
public struct Parameter {
public int Index;
public int Id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public byte[] Value;
}
[DllImport("exemple.dll", SetLastError = true)]
public static extern bool GetAllConsoleParameters([MarshalAs(UnmanagedType.Struct)] ref AllParameters pItem);
、これは私がそれを呼び出す方法です:
AllParameters item = new AllParameters();
if (AppAPI.GetAllConsoleParameters(ref item)) {
var array = item.Parameters;
}
私が呼ぶときGetAllConsoleParameters私は例外NotSupportedExceptionを取得します。私は多くの設定を試みましたが、成功しませんでした。
誰でもその達成方法をアドバイスできますか?
ありがとうございます。
のための多くは、のメッセージは何ですか例外? – cubrr
sttringはクラスであり、char配列と同等ではありません。 IN C++文字配列は '\ 0'で終了します。したがって、C#ではchar配列の代わりにbyte []を使用します。 – jdweng
私はかなり長い間C++を使用していませんでしたが、 'char []'と 'string []'は等価ではありません。私は、あなたのC#コードで 'string'だけを望むかもしれないと思います。 System.NotSupportedException メッセージ:コンパクトなフレームワーク2.0との非サポート例外 – Sean