用C#等效替换CreateDispatch调用调用的VB6 DLL

时间:2010-09-23 15:36:49

标签: c# visual-c++ vb6-migration

现有的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 个答案:

答案 0 :(得分:2)

CreateDispatch调用使用后期绑定与COM服务器通信。 ClassInterfaceType.AutoDispatch。使用AutoDual很好,还包括后期绑定支持。有一个显着的优势,你可以让它有一天更快。后期绑定并不便宜。