С++.NET сборка. Как задать ref парметр функции?
Пишу сборку С++.NET.
В С++.NET есть функция, требуется, чтоб ее параметры передавались как ссылки.
Код:
static public ref class Convert
{
public:
generic<typename gtype>
static inline void* pVoidCpy(gtype data){return &data;}
................
}
{
public:
generic<typename gtype>
static inline void* pVoidCpy(gtype data){return &data;}
................
}
В идеале каким-то образом передать параметр как ссылку( в C# это делается словом ref ).
Для успешного применения указателей С++ к управляемым типам, необходимо также знать о pin_ptr и interior_ptr и о том, как их применять. Но...
Опять фигнёй маетесь. Научитесь пользоваться сериализацией объектов.
А мне не это требовалось, кстати я смог: :)
Кому интересно:
Код:
static public ref class Convert
{
public:
generic<typename gtype>
static void* Pointer(interior_ptr<gtype> data)
{
return Native::TopPointer(&data);
}
generic<typename gtype>
static IntPtr NetPtr(interior_ptr<gtype> data)
{
return (IntPtr)Native::TopPointer(&data);
}
..............
}
{
public:
generic<typename gtype>
static void* Pointer(interior_ptr<gtype> data)
{
return Native::TopPointer(&data);
}
generic<typename gtype>
static IntPtr NetPtr(interior_ptr<gtype> data)
{
return (IntPtr)Native::TopPointer(&data);
}
..............
}
Код:
static class Native
{
public:
//Поднять адресат
static void* TopPointer(void* PV)
{
void **PPV;
__asm
{
mov eax, PV
mov PPV, eax
}
return *PPV;
}
..................
}
{
public:
//Поднять адресат
static void* TopPointer(void* PV)
{
void **PPV;
__asm
{
mov eax, PV
mov PPV, eax
}
return *PPV;
}
..................
}
Теперь получение IntPtr объекта в 10! раз быстрее происходит, чем через Marshal.