Вызов старого OLE-компонента из C # - PullRequest
3 голосов
/ 23 августа 2010

У меня есть очень старая (VC ++ 5.0) проприетарная DLL, которую мне нужно использовать из C # (Visual Studio 2010).В примере указано, что для доступа к этому компоненту мне нужно вызвать CreateDispatch("application"), что указывает на OLE.

Ниже приведен пример кода (C ++):

IComponentServer Server;
Server.CreateDispatch("Component.Server");

Я добавил ссылку через Visual Studio в имеющийся файл TLB и могу успешно импортировать его пространство имен, но IComponentServer не имеет метода с именем CreateDispatch.

Каков правильный подход для создания экземпляра компонента OLE с помощью C #?

Ответы [ 2 ]

3 голосов
/ 23 августа 2010

Если у вас есть CLSID или ProgID, вы можете использовать следующий набор методов.

var type = Type.GetTypeFromProgID(progIdString);
var obj = Activator.CreateInstance(type);
var server = (IComponentServer)obj;
1 голос
/ 23 августа 2010

MFC CreateDispatch создает COM-объекты на основе строки CLSID или ProgId. Вы можете создавать экземпляры COM-объектов непосредственно из кода C #.

При условии, что ссылка на Visual Studio дает Interop.Component.dll :

IComponentServer server = new Interop.Component.ServerClass();
...