2

既存の Visual C++ アプリケーションは、次の呼び出しを行います。

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

pMyClass は、明らかに ClassWizard によって自動生成されたクラスで、COleDispatchDriver を継承しています。

それが参照する実際の DLL は VB6 のものであり、これは一般的に VB から離れる努力の一環として C# に移行されています。

私の質問は... 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 に答える