COM Interop: C # COM Class Wrapper выдает исключение - PullRequest
0 голосов
/ 05 июля 2011

Я добавил ссылку на COM Type Libary в мой проект на C #.Я вижу интерфейс и класс объектов, созданный TlbImp.Сигнатура одного из методов интерфейса:

string GetResString(int hr);

, что соответствует его неуправляемому аналогу, определенному в заголовке C ++:

STDMETHOD(GetResString)(EMS_RESULT hr, /*[out,retval]*/ BSTR *pbszString);

Когда я вызываю вышеуказанный метод, используя:

 ITranslationObject translator = new TranslationObjectClass();
  var str = translator.GetResString(2);

Я получаю исключение с сообщением «Необработанное исключение в 0x00000000 в MfcVSApp1.exe: 0xC0000005: Место чтения нарушения доступа 0x00000000."

Я пытался вручную создать оболочку, используя P / Invoke и через DLLImportи получил то же самое.

Это моя первая попытка COM-взаимодействия из управляемого кода, поэтому я, вероятно, что-то упустил.Пожалуйста, напишите мне любые идеи, так как мне нужно, чтобы это работало.

TIA.

Ответы [ 2 ]

0 голосов
/ 05 июля 2011

Исключение вводит в заблуждение.Нет проблем с фактическим взаимодействием.Объекты, о которых заботится Tlblmp, работают как положено.Этот конкретный COM-объект требует вызова метода Initialze перед любыми другими открытыми методами, и я этого не делал.После инициализации COM-объекта исключение больше не генерируется, и взаимодействие работает, как ожидается.Спасибо Гансу П. за подсказку.

0 голосов
/ 05 июля 2011

Дикая догадка ... Может, проблема не в интерфейсе COM, а в пути к файлу? Убедитесь, что все относительные пути к файлам, используемым вашей COM DLL, относятся к вашему EXE, а не к вашей DLL. С COM они не всегда в одном и том же месте.

...