2008-11-25 183 views
1

我想看看是否註冊免費COM是我們可以在我們的web應用程序中使用,以緩解遺留COM組件的部署。然而,在我開始研究諸如Interop情況下使用它之前,我無法得到一個簡單的測試工作。這是我所做的: -註冊免費COM不爲我工作

1)創建一個新的VB ActiveX DLL項目。除了打開二進制兼容性外,將所有選項保留爲默認值。添加了一個名爲「SayHello」的簡單方法。
2)在Vs.NET 2008(SP1)中創建一個新的c#控制檯應用程序。將CPU設置爲x86,並添加對我的COM DLL的引用。
3)打開「孤立」的參考
4)從C#控制檯應用程序調用我的SayHello方法 - 所有的作品。
5)手動取消註冊COM DLL與regsvr32/u
6)嘗試再次運行控制檯應用程序。該應用程序因COM錯誤而失敗,因爲它找不到COM註冊信息。我可以確認清單存在(粘貼在下面)

我在Vista上運行這個,64位,如果這有所作爲。

感謝您的指點。

<?xml version="1.0" encoding="utf-8"?> 
<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity name="TestRegFreeCom.exe" version="1.0.0.0" processorArchitecture="x86" type="win32" /> 
    <file name="TestProject.dll" asmv2:size="20480"> 
    <hash xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <dsig:Transforms> 
     <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" /> 
     </dsig:Transforms> 
     <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
     <dsig:DigestValue>uIK8e9FAnH4SQwk6PRfrjdZHWuw=</dsig:DigestValue> 
    </hash> 
    <typelib tlbid="{08dcd362-63a1-424a-8c4e-e72dcda2a8e2}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" /> 
    <comClass clsid="{c540c43a-4d80-4c87-9091-dff664df0021}" tlbid="{08dcd362-63a1-424a-8c4e-e72dcda2a8e2}" progid="TestProject.Testy" /> 
    </file> 
</assembly> 

回答

2

如果您在應用程序中引用.dll,請單擊項目中引用的引用的dll,查看屬性並將Isolated設置爲TRUE。

這將在您的項目中包含.dll,並且您的應用程序將使用項目中包含的.dll的副本。

要查看該工作實例看這裏:

http://archive.msdn.microsoft.com/SEHE

有問題的.dll文件將需要在您構建應用程序使其正常工作,在系統上註冊。

2

您的代碼示例似乎是COM對象DLL的清單。你是否也有主要計劃的清單?它需要一個將另一個對象列爲依賴項。

answering an earlier question on this topic,我的測試是一個C#程序,它使用了VB5/VB6提供的舊ActiveX控件。該清單爲我的主要程序是這樣的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
    manifestVersion="1.0"> 
<assemblyIdentity 
      type = "win32" 
      name = "client" 
      version = "1.0.0.0" /> 
<dependency> 
      <dependentAssembly> 
         <assemblyIdentity 
            type="win32" 
            name="MSFLXGRD.X" 
            version="6.1.97.82" /> 
      </dependentAssembly> 
</dependency> 
</assembly> 

的dependentAssembly/assemblyIdentity元素的name屬性應該匹配一個在清單中的COM DLL。正如你在這裏看到的,它不一定是一個真正的文件名。

我看到的另一個可能的問題是您的清單中沒有comInterfaceExternalProxyStub元素。 MSDN上的這篇文章中提供了該標籤的示例以及還有什麼可以做的演練:Registration-Free Activation of COM Components: A Walkthrough。步驟6和7討論創建兩個清單。

0

感謝您的回覆。

我添加的清單是從.NET控制檯應用程序自動生成的。沒有爲COM DLL本身生成清單。我會檢查演練,看看是否提供任何答案。