Com.C # создать тип com-объекта - PullRequest
0 голосов
/ 20 марта 2012

Я разрабатываю некоторый код, который использует com-библиотеку. Я пытаюсь создать экземпляр класса через

Type t = Activator.CreateInstance("TypeID"); 

Но я не могу получить тип, это все время = ноль. progid уже просматривал Ole / COM Wever, похоже, что я правильно его ввел. В чем может быть пролем?

Ответы [ 3 ]

5 голосов
/ 20 марта 2012

Передаете ли вы строку идентификатора типа?Попробуйте сначала получить объект типа из ProgId:

Type t = Type.GetTypeFromProgID(progID);
object obj = Activator.CreateInstance(t);
0 голосов
/ 03 сентября 2016

Я бы хотел добавить ответ Стрилло, но у меня нет репутации, необходимой для добавления комментария.

Я получал то же поведение, что и shtpavel, до тех пор, пока я вручную не зарегистрировал COM dll. Как только я зарегистрировал COM dll, ответ Стрилло сработал для меня.

regasm /tlb /codebase project.dll

Регазм можно найти по адресу:

C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/RegAsm.exe

На вкладке «Построение» представления настроек проекта под заголовком «Вывод» имеется флажок «Зарегистрироваться для взаимодействия COM». Я доказал себе, что это регистрирует COM DLL, но снова ответ Strillo не работал для меня, пока я вручную не зарегистрировал DLL, используя вышеупомянутую команду.

RegAsm - Когда применима опция / codebase? утверждает, что флажок «Регистрация для взаимодействия COM» в Visual Studio - то же самое, что и мое решение для командной строки. Но по моему опыту, изначально «Зарегистрироваться для COM-взаимодействия» было недостаточно. Не знаю почему.

0 голосов
/ 20 марта 2012

Проблема в том, что Activator нельзя использовать для создания экземпляра COM-объекта таким образом ( РЕДАКТИРОВАТЬ: я сейчас подчеркиваю это, как я понял из вашего вопроса, что вы передаете GUID непосредственно к Activator.CreateInstance).

Обычно вы добавляете ссылку на зарегистрированный класс COM (через диалоговое окно «Добавить ссылку», вкладка «COM»). Тогда вы можете использовать класс COM, как и любой другой класс.

Или попробуйте то, что сказал Стрилло: -)

Однако, то, что я сделал так, как я предлагал, имеет преимущество в том, что он остается строго типизированным.

...