问题描述
这个是一个联合体中有两个结构体,每个结构体内部数据结构可能会差别较大。怎么在c#那边构造出相同的数据结构来取数据?typedefunion{struct{shortS1Short;longS1Long;charS1Char;}S1;struct{charS2CharA[20];__int64S2Int64;shortS2Short;}S2;}TestUnion;//数据结构extern"C"_declspec(dllexport)int_stdcalloutUnion(TestUnion(&data)[12])//供c#调用的外部方法{data[1].S1.S1Char='B';//省略....data[5].S1.S1Long=6666;//省略.....data[10].S1.S1Short=2222;//省略.....return1;}
我现在的c#代码和数据结构在下面[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]publicstructStruct1{///shortpublicshortS1Short;///intpublicintS1Long;///charpublicbyteS1Char;}[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential,CharSet=System.Runtime.InteropServices.CharSet.Ansi)]publicstructStruct2{///char[20][System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst=20)]publicstringS2CharA;///__int64publiclongS2Int64;///shortpublicshortS2Short;}[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit)]publicstructTestUnion{[System.Runtime.InteropServices.FieldOffsetAttribute(0)]publicStruct1S1;[System.Runtime.InteropServices.FieldOffsetAttribute(0)]publicStruct2S2;}[DllImport("Win32DynamicDll.dll")]publicstaticexternintoutUnion(refTestUnion[]TU);privatevoidGrid1_Loaded(objectsender,RoutedEventArgse){TestUnion[]TU=newTestUnion[15];outUnion(refTU);return;}
这里运行的时候会出错,应该是C#数据结构体的问题([System.Runtime.InteropServices.FieldOffsetAttribute(0)]这句有问题),请问要如何才能实现在c#这边得到数据?得到的数组里是S1或者S2都有可能。高人指导了,谢谢啊!很急