2016-02-11 144 views
1

#import Directive用於C++導入類型庫。 「no_registry」屬性告訴編譯器不要在註冊表中搜索類型庫。免費註冊COM互操作。組件B參考組件A?

例:

#import "XXX.tlb" no_namespace named_guids no_registry 

Quastion: 我想做同樣的事情在delphi: 我知道TLIBIMP被使用,但我找不到像no_registry任何屬性。

例:

TLIBIMP "XXX.tlb" ???? 

如何做到這一點,或者是這甚至可能嗎?

UPDATE:

我有並排並排端組件。 (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 
+0

我沒有看到任何TLIBIMP選項。您可以在IDE中導入它們(組件 - >導入組件 - >導入類型庫,然後點擊下一頁上的添加按鈕),但我不知道在命令行上有這樣做的方法。 –

回答

0

你的表現看起來不錯。依賴關係由依賴項元素指定。

tlibimp似乎檢查註冊表和工作目錄中的依賴關係(儘管我找不到這方面的文檔)。如果您的設置需要並行執行,並且您希望避免註冊DLL,請確保程序集A和程序集B都駐留在工作目錄中並運行tlibimp B.tlb [options]