繁体   English   中英

免费注册COM互操作。 组件B参考组件A?

[英]Registration free COM interop. assembly B reference assembly A?

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

例如:

#import "XXX.tlb" no_namespace named_guids no_registry

问题:我想在delphi中做同样的事情:我知道使用了TLIBIMP ,但是我找不到像no_registry这样的属性。

例如:

TLIBIMP "XXX.tlb" ????

这是怎么做的,甚至有可能吗?

更新:

我有一个并排的并排组件。 一个COM引用一个组件(B) COM组件(A)。 错误可能在清单文件中。 如何在清单中定义依赖项? 如何使用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 

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM