-1

私はC++でこれらの宣言を持っています:

struct objectStruct;

int positionMemory = getPosition();

short size = getSize();

void *allocatedObject; // Originally, it is in C#: IntPtr allocatedObject { get; private set; }

byte[] byteName = Encoding.ASCII.GetBytes("Hello There");

これらのコード行をC#からC++に変換したいと思います。

string result = Marshal.PtrToStringAnsi(new IntPtr(positionMemory), size); 

Marshal.StructureToPtr(objectStruct, new IntPtr(positionMemory), true);

Marshal.Copy(byteName, 0, new IntPtr(positionMemory), size);

long posInMemory = allocatedObject.Offset(size).ToInt64();

私はマーシャリングに精通していません。

4

1 に答える 1

1

私はC++を知りませんが、マーシャリングは知っているので、これが行が行っていることです

//Get size number of characters of the string pointed to by the positionMemory pointer.
string result = Marshal.PtrToStringAnsi(new IntPtr(positionMemory), size); 

//Copy the contents of objectStruct to the memory location pointed at by positionMemory
Marshal.StructureToPtr(objectStruct, new IntPtr(positionMemory), true);

//Copy size number of bytes from the byteName array starting at index 0 to the memory indicated by positionMemory
Marshal.Copy(byteName, 0, new IntPtr(positionMemory), size);

//I think offsetting the memory location indicated by allocatedObject by size number of bytes and converting the memory pointer to an Int64.
machineNamePosInMem = allocatedObject.Offset(size).ToInt64();

これのほとんどを実際にC++に変換する必要がある理由がわかりません。マーシャリングのポイントは、マネージオブジェクトをアンマネージコードで使用できるようにし、アンマネージオブジェクトをマネージオブジェクトに変換することです。マネージC++であっても、実際に行う必要はありません。

于 2012-05-15T15:29:30.570 に答える