2

现有的 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 上设置公共字符串字段(代码中未显示)时,是否有任何需要注意的问题?

请注意,我不是此代码的原始作者 - 它来自遗留系统,我只是在进行迁移。

4

1 回答 1

2

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

于 2010-09-23T16:09:39.210 回答