首页 > 解决方案 > 如何处理与 .NET WPF 应用程序具有 OCX 依赖项的 VB6 ActiveX dll 的对话

问题描述

我有一个依赖于 ComDlg32.ocx 的 VB6 ActiveX dll。此 ActiveX dll 是从 .NET 应用程序调用的。ActiveX dll 有一个公共接口,它有 1 个方法,它打开一个表单,打开一个打开文件对话框(来自 ComDlg32.ocx)。.NET 应用程序有一个按钮,它将调用此 ActiveX dll 方法。

当 ComDlg32.ocx 和 ActiveX dll 都注册(通过 regsvr32)时,这一切都有效,但我需要使用 RegFree COM 让它工作,至少对于 ActiveX dll 的依赖项。我已经为这个 ActiveX dll 创建了一个清单文件,但它似乎没有被读取。ProcMon 没有参考清单文件,并且 sxstrace 没有给我任何信息(当我解析 etl 文件时,实际上是一个空白文本文件)。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
    <assemblyIdentity name="DeployArchitectureTest" version="1.0.0.0" type="win32" processorArchitecture="x86"/>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
    <file name="COMDLG32.OCX">
        <typelib tlbid="{F9043C88-F6F2-101A-A3C9-08002B2F49FB}" version="1.2" flags="control,hasdiskimage" helpdir="" />
        <comClass clsid="{F9043C85-F6F2-101A-A3C9-08002B2F49FB}" tlbid="{F9043C88-F6F2-101A-A3C9-08002B2F49FB}" progid="MSComDlg.CommonDialog.1" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,onlyiconic,cantlinkinside,insideout,activatewhenvisible,invisibleatruntime,setclientsitefirst">
            <progid>MSComDlg.CommonDialog</progid>
        </comClass>
    </file>
</assembly>

我已经尝试了 dll 的外部清单以及嵌入清单,但仍然没有运气。我一定遗漏了一些东西,但我能找到的所有信息都是关于如何为 exe 创建清单文件,但没有关于如何处理具有自己依赖关系的 ActiveX dll 的信息。

如果有人有任何信息,那么我将不胜感激。

标签: c#comvb6

解决方案


经过更多的研究并被@SimonMourier 和@HansPassant 指出了正确的方向,我设法让这个工作正常进行。

我认为如果我使用@HansPassant 提到的资源 ID #2,那么 dll 清单是可能的,但我无法让它以这种方式工作。无论我做什么,似乎从未读取过 dll 清单。

然而,我确实发现将 dll 清单中的所有清单数据包含到 exe 清单中,并确保 exe 没有嵌入式清单允许 RegFree COM 按预期工作。我发现 Visual Studio 正在使用嵌入式清单构建我的 .NET exe,即使项目中有一个 app.manifest 文件。我必须将 COM dll 设置为“isolated=true”,以便将清单构建为外部。

因此,感谢@SimonMourier 和@HansPassant,您的两条评论都让我找到了正确的解决方法。


推荐阅读