Замена библиотеки VB6, вызванной вызовом CreateDispatch, на эквивалент C # - PullRequest
2 голосов
/ 23 сентября 2010

Существующее приложение Visual C ++ выполняет следующий вызов;

BOOL bRet = pMyClass.CreateDispatch("BlahBlah.MyClass");
if ( !bRet )
{
    // Error handling snipped
}
else
{
    pMyClass.MyMethod();
    pMyClass.ReleaseDispatch();    
}

pMyClass - это класс, который, по-видимому, автоматически сгенерирован ClassWizard и наследуется от COleDispatchDriver.

Фактическая библиотека DLL, к которой она относится, - это библиотека VB6, и она переносится на C # как часть попытки отойти от VB в целом.

Мой вопрос ... есть ли что-то особенное, что мне нужно сделать, чтобы убедиться, что сборка C # будет работать так же, как и оригинальный модуль VB6? В настоящее время C # выглядит так:

[ComVisible(true)]
[ProgId("BlahBlah.MyClass")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class MyClass
{
    ...

    public void MyMethod()
    {
        ...
    }
}

Достаточно ли этого? Есть ли какие-либо ошибки, о которых нужно знать при настройке открытых строковых полей (не показано в коде) на MyClass?

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

1 Ответ

2 голосов
/ 23 сентября 2010

При вызове CreateDispatch используется поздняя привязка для связи с COM-сервером.ClassInterfaceType.AutoDispatch.Использование AutoDual - это хорошо, это также включает поддержку позднего связывания.С существенным преимуществом, что вы можете сделать это намного быстрее в один прекрасный день.Позднее связывание не дешево.

...