tlb ファイルを使用せずにアウトプロセス COM サーバーを使用する方法

StackOverflow https://stackoverflow.com/questions/2369181

  •  24-09-2019
  •  | 
  •  

質問

Window COMコンポーネントについてです。

  • サーバー.exe:32 ビットのアウトプロセス COM サーバー
  • CLSID_アプリケーション:Server.exe 内の COM オブジェクトの GUID
  • クライアント.exe:レジストリを使用しない方法で Server.exe を使用する 64 ビット クライアント アプリケーション。

ご存知のとおり、exe はレジストリ不要の COM コンポーネントとして使用できません。そのような動作を模倣するには、正確なパスを指定して Server.exe プロセスを自分で開始します。

  • CreateProcess("Server.exe")
  • IClassFactory* pFactory = CoGetClassObject(CLSID_Application)
  • pFactory->CreateInstance(ppAppObject);

Server.tlb が登録されている場合は機能しますが、Server.tlb の登録を解除すると、Server.exe と Client.exe の両方にマニフェストを埋め込んでも、ppAppObject の作成に失敗します。

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<file name="Server.tlb">
  <typelib tlbid="{DAC4A4C9-F84C-4F05-A7DC-E152869499F5}" version="1.0" helpdir=""></typelib>
</file>
<comInterfaceExternalProxyStub name="IApplication" iid="{D74208EA-71C2-471D-8681-9760B8ECE599}" tlbid="{DAC4A4C9-F84C-4F05-A7DC-E152869499F5}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
</assembly>

これについて何か考えはありますか?

編集:インターフェイスに tlbid を指定し、両方の exe にマニフェストを埋め込むと、実際に機能することがわかりました。

役に立ちましたか?

解決

<comInterfaceExternalProxyStub>要素は十分ですか?あなたにも<comClass><typelib>要素を必要としないのですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top