免注册 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
您的清单看起来不错。依赖项由依赖项元素指定。
tlibimp 似乎检查注册表和工作目录中的依赖项(尽管我找不到任何文档)。如果安装程序需要并行执行,并且希望避免注册 DLL,请确保程序集 A 和程序集 B 都驻留在工作目录中并运行 tlibimp B.tlb [options]
。