Передача простого объекта C # в C ++ и вызов метода для этого объекта - PullRequest
1 голос
/ 24 июля 2011

Я хочу передать объект класса C # в C ++, а в собственном коде c ++ хочу вызвать какой-то метод для этого переданного объекта.

    Public class MyClass{
    {
       bool IsThisValid()
       {
           IsValid(this);//Check the Native passing it this object
       }
       [DllImport("mylibraryinCpp.dll", EntryPoint="IsValid", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.StdCall) ]       
       static internal extern bool IsValid(object); 
    }//end of class

Теперь нужно, чтобы код C ++ получил этот объект и выполнил над ним некоторую операцию.В нативном коде C ++ у меня есть подпись

    //Native C++ code mylibraryinCpp.dll
    extern "C" __declspec(dllexport) BOOL __stdcall IsValid (VARIANT theObject)
    {
 ((mscorlib::_object*)(thObject.pdispVal))->get_ToString(bstrStringVal);//AccessViolationException occurs here.
    }

. Приведенный выше код работает в большинстве случаев, но иногда он дает исключение AccessViolationException, в другой памяти может быть повреждено сообщение.Я новичок в этом, поэтому не уверен, что это правильный путь для передачи объекта из C # в C ++?Спасибо за любые предложения

1 Ответ

1 голос
/ 24 июля 2011

Объект может быть перемещен сборщиком мусора.Обычно вы просто передаете указатель функции на собственный код - он может быть сгенерирован из делегата в .NET с помощью JIT - что определенно работает.Это известно как обратный P / Invoke.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...