Window COM コンポーネントについてです。
- Server.exe: 32 ビットのアウトプロセス COM サーバー
- CLSID_Application: Server.exe 内の COM オブジェクトの GUID
- Client.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に埋め込むと、実際に機能することがわかりました