繁体   English   中英

如何处理与 VB6 ActiveX dll 的对话,该 ActiveX dll 具有来自 .NET Z3055DD731D7924089A62F3 的 OCX 依赖项

[英]How to handle talking to VB6 ActiveX dll that has OCX dependencies from a .NET WPF application

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

当 ComDlg32.ocx 和 ActiveX dll 都注册(通过 regsvr32)时,这一切都有效,但我需要使用 RegFree COM 让它工作,至少对于 ActiveX Z0641ZAF16233FEEC48CZ 的依赖项我已经为这个 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 的信息。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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