简体   繁体   中英

Registration free COM interop. assembly B reference assembly A?

#import Directive is used in C++ to import a Type Library. " no_registry " attribute Tells the compiler not to search the registry for type libraries.

Ex:

#import "XXX.tlb" no_namespace named_guids no_registry

Quastion: I want to do the exact same thing in delphi: I know TLIBIMP is used, but i can not find any attribute like no_registry .

Ex:

TLIBIMP "XXX.tlb" ????

How is this done, or is this even possible?

UPDATE:

I have a Side-by side Side-by-side Assemblies. An COM assembly(B) that references a COM assembly(A). the error might be in the manifest file. How can I define a dependency in the manifest? How can i use Tlbexp.exe to define the dependency? I have already tried:

<?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>

and to create the type library:

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 

Your manifest looks fine. The dependency is specified by the dependency element.

tlibimp seems to check for dependencies in the registry and in the working directory (although I can find no documentation for this). If your setup requires side-by-side execution and you want to avoid registering your DLLs, make sure both assembly A and assembly B reside in the working directory and run tlibimp B.tlb [options] .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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