كيفية استخدام خادم COM خارج العملية بدون ملف TLB الخاص به
-
24-09-2019 - |
سؤال
إنه حول مكون Window Com.
- Server.exe: خادم COM خارج العملية 32 بت 32 بت
- CLSID_APPLICATION: GUID لكائن com في server.exe
- Client.exe: تطبيق عميل 64bit يستخدم server.exe بطريقة خالية من التسجيل.
كما نعلم ، لا يمكن استخدام exe كمكون COM خالٍ من التسجيل ، لتقليد مثل هذا السلوك ، أبدأ عملية الخادم.
- CreateProcess ("server.exe")
- iclassfactory* pfactory = cogetClassObject (clsid_application)
- pfactory-> createInstance (pPappObject) ؛
إنه يعمل إذا تم تسجيل server.tlb ، ولكن بعد un register server.tlb ، فقد فشل فقط في إنشاء ppappObject ، على الرغم من أنني قمت بتضمين البيان في كل من server.exe و client.exe:
<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>
عناصر كذلك؟
لا تنتمي إلى StackOverflow