Windows CE 프로그램 및 Compact Framework 2.0에서 C++에서 C#으로 다음 구조체를 마샬링하려고합니다. 현악기의 마샬링에 많은 어려움을 겪고 있습니다.WinCE에서 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# 코드 :
나는 ++ 코드이 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#에서 문자 배열 대신 바이트 []를 사용하십시오. – jdweng
저는 꽤 오래 C++을 사용하지는 않았지만'char []'와'string []'은 동등하지 않습니다. 난 당신이 C# 코드에서 단지'문자열'을 원한다고 생각합니다. – Sean