免注册 COM 互操作.程序集 B 引用程序集 A

本文关键字:程序集 引用 互操作 注册 COM | 更新日期: 2023-09-27 18:34:09

#import 指令在C++中用于导入类型库。"no_registry"属性 告知编译器不要在注册表中搜索类型库。

前任:

#import "XXX.tlb" no_namespace named_guids no_registry

选区:我想在德尔福做完全相同的事情:我知道使用了 TLIBIMP,但我找不到任何像 no_registry 这样的属性。

前任:

TLIBIMP "XXX.tlb" ????

这是怎么做到的,或者这甚至可能吗?

更新:

我有一个并排的并排程序集。引用COM程序集 (A) 的COM程序集 (B)。错误可能出在清单文件中。如何在清单中定义依赖项?如何使用Tlbexp.exe来定义依赖项?我已经尝试过:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly
 xmlns="urn:schemas-microsoft-com:asm.v1"
 xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
 xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  manifestVersion="1.0">
   <assemblyIdentity
     type="win32"
     name="CommonInteropB"
     version="1.0.0.0"
     publicKeyToken="" />
   <clrClass
   clsid="{XXXXXXXXX}"
   progid="CommonInteropB.SomeFactory"
    name="CommonInteropB.SomeFactory"
   threadingModel="Both" tlbid="{XXXXXXXXXXXXXXXX}"
    runtimeVersion="v4.0.30319" />
  <dependency>
    <dependentAssembly>
       <assemblyIdentity type="win32"
                    name="CommonInteropA"
                    version="1.0.0.0"
                    publicKeyToken="" />
     </dependentAssembly>
  </dependency>
</asmv1:assembly>

并创建类型库:

tlbexp.exe CommonInteropB.dll /tlbreference:"CommonInteropA.tlb" /tlbreference:"C:'Windows'System32'stdole2.tlb" /tlbreference:"C:'Windows'Microsoft.NET'Framework'v4.0.30319'mscorlib.tlb" /out:CommonInteropB.tlb 

免注册 COM 互操作.程序集 B 引用程序集 A

您的清单看起来不错。依赖项由依赖项元素指定。

tlibimp 似乎检查注册表和工作目录中的依赖项(尽管我找不到任何文档)。如果安装程序需要并行执行,并且希望避免注册 DLL,请确保程序集 A 和程序集 B 都驻留在工作目录中并运行 tlibimp B.tlb [options]