首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reg-Free COM不适用于我

Reg-Free COM不适用于我
EN

Stack Overflow用户
提问于 2008-11-25 15:52:47
回答 3查看 2.2K关注 0票数 1

我正在尝试看看是否可以在我们的web应用程序中使用Reg-Free COM来简化遗留COM组件的部署。然而,在我开始研究像在互操作情况下使用它这样的事情之前,我不能让一个简单的测试工作。以下是我所做的工作:

1)新建VB ActiveX DLL工程。除了开启二进制兼容性外,所有选项都保留为默认。添加了一个带有简单方法"SayHello“的类。

2)在Vs.NET 2008 (SP1)中创建新的c#控制台应用。将CPU设置为x86,并添加了对我的COM的引用。

3)打开引用的“隔离”。

4)从c#控制台app中调用我的SayHello方法-所有工作。

5)在regsvr32 /u中手动注销COM dll

6)再次尝试运行控制台应用。由于找不到COM注册信息,应用程序失败并返回COM错误。我可以确认清单是否存在(粘贴在下面)

我在64位的Vista上运行它,如果这有什么不同的话。

谢谢你的指点。

代码语言:javascript
复制
<?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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-12-29 19:54:26

如果您在应用程序中引用.dll,请单击项目中references下的引用dll,查看属性并将Isolated设置为TRUE。

这将在您的项目中包含.dll,并且您的应用程序将使用项目中包含的.dll副本。

要在此处查看此外观的工作示例:

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

有问题的.dll需要在构建应用程序的系统上注册,这样才能正常工作。

票数 2
EN

Stack Overflow用户

发布于 2008-11-25 18:24:56

您的代码示例似乎是COM对象DLL的清单。你也有主程序的清单吗?它需要一个将另一个对象列为依赖项的对象。

answering an earlier question on this topic中,我的测试是一个C#程序,它使用了VB5/VB6中提供的一个旧的ActiveX控件。我的主程序的清单如下所示:

代码语言:javascript
复制
<?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讨论了如何创建这两个清单。

票数 2
EN

Stack Overflow用户

发布于 2008-11-26 15:34:35

感谢您的回复。

我添加的清单是从.NET控制台应用程序自动生成的。没有为COM DLL本身生成清单。我将查看演练,看看它是否提供了任何答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/317794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档