構造体を管理対象コードから管理対象コードにipcで転送します。 固定サイズを設定しないで文字列を転送することは可能です または残りの部分を構造体の最後のメンバーに埋め込みますか?Interop C++ struct in c#可変長文字列サイズ
C++のstruct
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;
}
変換は
を構造体へのバイト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;
}
私はあなたのことを分かります。 charポインタを使用することによって、いくつかのポインタを転送するかどうかを指定できますか?私の質問は可能ですか?私はC#.NET Worldからのもので、C++を扱うのは難しいです。 –
C++コード自体で変換を行う必要があります。 1つ以上のソースファイルに対してCLIを有効にすることができます。しかし、C++プロジェクトはMSCOREE.DLLに依存していました(ネイティブクライアントはそれをロードすることができます)。 – Ajay
私の場合はCLIを有効にすることはできません。 –