簡體   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