En un proyecto de C#, necesito pasar los parámetros de objeto poniendo referencias en una estructura. es decir, tengo una estructura pasada a un despachadorConversión de void * a objeto en C#
struct SOMESTRUCT
{
public int lpObject;
}
Dónde lpObject mantiene un puntero a un objeto personalizado como
class SomeClass
{
private string foo;
}
Y la estructura SOMESTRUCT se pasa de un método a otro para finalmente llegar a mi código. No puedo modificar el flujo de ejecución ni el sistema SOMSTRUCT extraño, por lo que supuso que la única solución era emitir mi objeto a un puntero de la siguiente manera:
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);
Sin embargo, no puedo encontrar la manera de recuperar los miembros MyObject de los campos de lpObject. Algo como esto:
SomeClass myObject = CastPointerToObject(struct.myRef) as SomeClass;
¿Hay alguna manera de hacerlo, o es imposible? ¿Cómo puedo decirle al recolector de basura que maneje el objeto? ¿Debo crear un nuevo objeto recogido de basura y copiar el campo de datos por campo?
TYIA,
use IntPtr en lugar de int ....por lo tanto, funcionará también en 64 bits –