既存のアプリケーションの自動化インターフェースを構築しています。DLLサーバーとEXEサーバーを実装した後(主にCOMの基本に慣れるため)、IDLファイルからタイプライブラリを生成し、たとえば、基本的にVBScriptからアプリケーションを自動化できるようになりました。
Set oApp = CreateObject("MyApp.1")
oApp.ShowAboutBox()
パラメータをとらない関数へのこの単純な呼び出しは機能します。次のステップは、パラメーターを受け取る関数を呼び出すことです。
IDLファイル内の関数のシグネチャは次のとおりです。
HRESULT CreateSomeChildWindow([out, retval] MyChildWindow** ppChildWindow);
そしてVBScriptではそうなると思います
Dim oWnd As MyChildWindow
oWnd = oApp.CreateSomeChildWindow()
この呼び出しはすでにC++で機能しますMyChildWindow
が、現在レジストリにCOMオブジェクトとして登録されていません。登録MyChildWindow
する必要がない理由は、パラメータでCreateSomeChildWindow
作成されたオブジェクトへのインターフェイスポインタを返すだけだからです。また、登録されていないMyChildWindow
理由は、冗長性を避けたいためです。また、直接インスタンス化したくないためです(たとえば、VBScriptで呼び出すことによって)。MyChildWindow
CreateObject
質問:
やっぱり登録が必要かどうか調べてみましたMyChildWindow
。CreateSomeChildWindow
VBScriptで呼び出すために私の仮定は正しいですか
- 私は書く必要があります
Dim oWnd As MyChildWindow
- これが機能するに
MyChildWindow
は、登録する必要があります
そして、その答えが「はい」MyChildWindow
の場合、クラスオブジェクトを実装していないので、クライアントが直接実装できないことを願っていますか?または、クラスオブジェクトを実装する必要がありますか?