c# - 如何处理与来自 .NET WPF 应用程序的具有 OCX 依赖项的 VB6 ActiveX dll 的对话

标签 c# com vb6

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

当 ComDlg32.ocx 和 ActiveX dll 都已注册(通过 regsvr32)时,这一切都有效,但我需要使用 RegFree COM 使其正常工作,至少对于 ActiveX dll 的依赖性而言。我做了一个manifest file对于这个 ActiveX dll,但它似乎没有被读取。 ProcMon 没有引用 list 文件,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 的外部 list 以及嵌入 list ,但仍然没有成功。我一定遗漏了一些东西,但我能找到的所有信息都在谈论如何为 exe 创建 list 文件,但没有关于如何处理具有自己的依赖项的 ActiveX dll 的信息。

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

最佳答案

经过更多研究并被@SimonMourier 和@HansPassant 指出正确的方向后,我成功地完成了这项工作。

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

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

非常感谢@SimonMourier 和@HansPassant,你们的评论让我找到了正确的解决方法。

关于c# - 如何处理与来自 .NET WPF 应用程序的具有 OCX 依赖项的 VB6 ActiveX dll 的对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67023477/

相关文章:

c# - 当我运行 appRoleAssignments 时,它返回不清楚的响应

c# - EF Core 2.x - IQueryable 扩展正在客户端而不是数据库进行评估

c# - 在数据库中生成测试数据的任何工具

c# - COM Interop 中内存释放的责任

C++ 公开的属性名称与 IDL 中给出的名称不匹配

c# - 在Unity3D中管理复杂的预制层级

windows - 将结构体传递给 IDispatch 方法

vb.net - 相当于 "Dim As String * 1"VB6 到 VB.NET

vb6 - 在 vb6 中只允许字符串中的某些字符

vb6 - 受 MsgBox 影响的 VB 6 数据访问