我通過ipc從非託管轉換爲託管代碼的結構。 是否可以傳輸字符串而不設置常量大小 或將其餘字節填充到結構的最後一個成員中?互操作C++結構在C#變量字符串大小
C++結構
typedef union
{
struct
{
int id;
string Data;
};
char bytes[];
} SocketData;
C#結構
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct SocketData
{
public int id;
public string Data;
}
轉換字節STRUCT
public static object RawDeserialize(byte[] rawData, int position, Type anyType)
{
var rawsize = rawData.Length;
//if (rawsize > rawData.Length)
// return null;
var buffer = Marshal.AllocHGlobal(rawsize);
Marshal.Copy(rawData, position, buffer, rawsize);
var retobj = Marshal.PtrToStructure(buffer, anyType);
Marshal.FreeHGlobal(buffer);
return retobj;
}
我明白你的觀點。通過使用字符指針只會傳遞一些指針或不是?我的問題甚至有可能嗎?我來自C#.NET World並且很難處理C++。 –
您需要在C++代碼本身進行轉換。您可以爲一個或多個源文件啓用CLI。然而,C++項目依賴於MSCOREE.DLL(本地客戶端可以加載它)。 – Ajay
我知道但我不能啓用CLI在我的情況。 –