现有的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上设置公共字符串字段(未在代码中显示)时是否有任何问题需要注意?
请注意,我不是此代码的原作者 - 它来自遗留系统,我只是在进行迁移。
答案 0 :(得分:2)
CreateDispatch调用使用后期绑定与COM服务器通信。 ClassInterfaceType.AutoDispatch。使用AutoDual很好,还包括后期绑定支持。有一个显着的优势,你可以让它有一天更快。后期绑定并不便宜。