C# プロジェクトでは、構造体に参照を配置してオブジェクト パラメーターを渡す必要があります。つまり、ディスパッチャーに渡された構造があります
struct SOMESTRUCT
{
public int lpObject;
}
lpObject は、次のようなカスタム オブジェクトへのポインターを保持します。
class SomeClass
{
private string foo;
}
そして、SOMESTRUCT 構造体がメソッドからメソッドへと渡され、最終的にコードに到達します。実行フローも奇妙な SOMSTRUCT システムも変更できないため、唯一の解決策は、オブジェクトを次のようなポインターにキャストすることだと推測しました。
var myObject = new SomeClass();
GCHandle GC = GCHandle.Alloc(myObject, GCHandleType.Pinned);
int myRef = GC.AddrOfPinnedObject().ToInt32();
GC.Free();
SOMESTRUCT struct;
struct.lpObject = myRef;
someMethod(struct);
ただし、lpObject フィールドから myObject メンバーを取得する方法がわかりません。このようなもの:
SomeClass myObject = CastPointerToObject(struct.myRef) as SomeClass;
それを行う方法はありますか、それとも不可能ですか?ガベージ コレクターにオブジェクトを処理するように指示するにはどうすればよいですか? 新しいガベージ コレクション オブジェクトを作成し、フィールドごとにデータをコピーする必要がありますか?
ティア、