У меня возникла проблема с передачей неуправляемого указателя (сохраненного как член в управляемой оболочке) неуправляемой функции, требующей двойного указателя (указатель на сохраненный неуправляемый указатель). Эта проблема иллюстрируется ниже:Передача частного элемента указателя на неуправляемую функцию C++/CLI
У меня есть оболочка для неуправляемого структуры C объявленную ниже:
public ref class MyStructWrapper
{
private:
myStruct *_rto;
public:
MyStructWrapper()
{
_rto = new myStruct();
}
// read-only property
public property RTO{
myStruct * get(){return _rto;}
}
}
мне нужно вызвать функцию из C Dll:
// alters data based on data in "SomeotherStructWrapper"(which consequently holds a
// SomeOtherStruct*).
int SomeOtherStructWrapper::AlterMyStruct(myStructWrapper^ myObj)
{
// unmanaged function in C DLL
pin_ptr<myStruct> ptr = myObj->RTO;
AlterMyStructUnmanaged(&ptr,&someOtherStructStoredMemberPtr);
}
Целью является для изменения данных, которые myObj-> RTO указывает на ... К сожалению, это компилирует и запускает и изменяет данные за ptr, но фактические данные, которые мне нужно изменить в myObj, нет.
EDIT:
Это реализация SomeOtherStructWrapper:
public ref class SomeOtherStructWrapper
{
private:
otherStruct *_ots;
public:
MyStructWrapper()
{
_ots = new otherStruct();
}
int AlterMyStruct(MyStructWrapper ^rto);
}
}
Декларация AlterMyStructUnmanaged:
__declspec(dllexport) int AlterMyStructUnmanaged
(
MyStruct **Object,
otherStruct struct
);
Заранее спасибо за помощь!
Этот вопрос очень похож на этот вопрос http://stackoverflow.com/questions/569690/passing-unmanaged-pointers-in-c-cli ? rq = 1 Но, к сожалению, вызванная функция определяется внутри класса и поэтому может напрямую обращаться к указателю. – GCar89
Можете ли вы показать нам объявление «AlterMyStructUnmanaged»? –
Обновлено с помощью объявления функции C – GCar89