كيفية استخدام خادم COM خارج العملية بدون ملف TLB الخاص به

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

  •  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> عناصر كذلك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top