#import Directive在 C++ 中用于导入类型库。 “no_registry”属性告诉编译器不要在注册表中搜索类型库。
例如:
#import "XXX.tlb" no_namespace named_guids no_registry
问题:
我想在 delphi 中做同样的事情:
我知道TLIBIMP已使用,但我找不到任何属性,如 no_registry
。
例如:
TLIBIMP "XXX.tlb" ????
这是如何完成的,或者这是否可能?
更新:
我有一个并排并排的程序集。
引用 COM
程序集 (A) 的 COM
程序集 (B)。
错误可能在 list 文件中。
如何在 list 中定义依赖项?
我如何使用 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
最佳答案
您的 list 看起来不错。依赖项由 dependency 元素指定。
tlibimp 似乎会检查注册表和工作目录中的依赖项(尽管我找不到这方面的文档)。如果您的设置需要并行执行并且您希望避免注册 DLL,请确保程序集 A 和程序集 B 都位于工作目录中并运行 tlibimp B.tlb [options]
。
关于c# - 注册免费 COM 互操作。程序集 B 引用程序集 A?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35343718/