getItemAtPosition () Как получить читаемые данные из выбранного элемента в ListView

Я конвертировал кучу старого кода C ++ в код C ++ / CLI, и я думаю, что я закодировал себя в за угол.

Моей целью было взять неуправляемую библиотеку C ++ и кучу файлов заголовков и раскрыть их функциональность для решения C #. Прочитав в Интернете, стандартный способ сделать это:

  • Создать два класса C ++: один управляемый, другой неуправляемый.
  • Неуправляемый класс будет обрабатывать объекты в библиотеке C ++, чтобы обеспечить желаемую функциональность.
  • Управляемый класс объединит все общедоступные методы в неуправляемый класс. Каждый метод-оболочка будет обрабатывать необходимые преобразования из String ^ в строку и т. Д.

Но мой сценарий не очень сложный, поэтому я решил просто попробовать реализовать все в одном классе. Сейчас я борюсь со своеобразной проблемой, которая генерирует AccessViolationExceptions.

Мой заголовочный файл выглядит так:

public ref class ManagedClass
{
public:
  ManagedClass();
  void CreateUnmanagedObject(String^ param1);
  void UseUnmanagedObject();

  UnmanagedObject *myUnmanagedObject;
}

А мой файл cpp выглядит так:

void ManagedClass::CreateUnmanagedObject(String^ param1)
{
   /* Convert params, use them in some way. */

   /* capture the output of this library call to the pointer defined in ManagedClass.*/
   myUnmanagedObject= &(LibrayObject.LibraryMethod1());  
}
void ManagedClass::UseUnManagedObject()
{
   /* This function will pass the Unmanaged object into
    * a library function which will do some work on it.
    */
   LibraryObject.LibraryMethod2(*myUnmanagedObject);
   /* Whoops! System.AccessViolationException is thrown! */
}

Интересно то, что если я вызываю LibraryMethod2 в CreateUnmanagedObject сразу после LibraryMethod1 , работает нормально. Но после выхода CreateUnmanagedObject кажется, что память, на которую указывает myUnmanagedObject, потеряна.

Может ли кто-нибудь увидеть причину, по которой это происходит?

Изменить: Объявления библиотеки выглядят так:

UnmanagedObject LibraryMethod1();
void LibraryMethod2(UnmanagedObject &param);
1
задан Slider345 8 October 2010 в 01:24
поделиться