第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

從 WPF 調(diào)用 COM,即使使用 STAThread 也獲得 E_NOINTERFACE

從 WPF 調(diào)用 COM,即使使用 STAThread 也獲得 E_NOINTERFACE

C#
慕容3067478 2021-07-13 13:01:15
我正在嘗試遵循這個(gè)答案https://stackoverflow.com/a/47295752/1237135,以獲得 IIS Express 網(wǎng)站的列表,其中涉及引用 Microsoft.Web.dll(這是一個(gè) .NET 程序集,但是大概它使用 COM 調(diào)用)并調(diào)用此代碼using (var runtimeStatusClient = new RuntimeStatusClient()){  var workerProcess = runtimeStatusClient.GetWorkerProcess(19464);  //there's more but this is all that is needed for failure}它實(shí)際上有效,代碼運(yùn)行并具有有意義的數(shù)據(jù),但是完成后幾秒鐘我收到此錯(cuò)誤System.InvalidCastException: 'Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Web.RuntimeStatus.IRsca2_WorkerProcess'. This operation failed because the QueryInterface call on the COM componentfor the interface with IID '{B1341209-7F09-4ECD-AE5F-3EE40D921870}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).'E_NOINTERFACE 通常與不使用 STAThread 模型相關(guān)聯(lián),但我已經(jīng)驗(yàn)證該線程是 STA。該代碼在控制臺應(yīng)用程序環(huán)境中正常運(yùn)行,但在 WPF 中不運(yùn)行。上面的答案提到我還查看了 RegisteredUrlsInfo(在 Microsoft.Web.dll 中),發(fā)現(xiàn)它使用了兩個(gè) COM 接口,IRsca2_Core (F90F62AB-EE00-4E4F-8EA6-3805B6B25CDD) IRsca2_WorkerProcess (B1341209-7F09-4ECD-AE5F-3EE40D921870)我看到另一個(gè)答案https://stackoverflow.com/a/1058978/1237135談到嘗試將其添加到您的 App.exe.manifest:iid="{C677308A-AC0F-427D-889A-47E5DC990138}"proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"baseInterface="{0000000000000000000000000 -YOUR-TLB-GUID-HERE}" /> 可以從 Visual Studio 生成的 Native.Namespace.Assembly.Name.manifest 中找到 TLBID,如下所示:但我不清楚這是否適用于此。我還想知道它是否是 DLL Hell,但這并不能解釋為什么它可以從控制臺運(yùn)行,是嗎?
查看完整描述

1 回答

?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

顯然我做了兩個(gè)致命的假設(shè):

  1. 控制臺應(yīng)用程序使用 STA。然而這不是真的,似乎默認(rèn)情況下它們是 MTA。我認(rèn)為這個(gè)數(shù)字是因?yàn)樽烂鎽?yīng)用程序必須在 Main 方法中明確聲明 STA。

  2. 要進(jìn)行 COM 互操作,您必須使用 STA。我認(rèn)為這是因?yàn)槭褂?STA 是解決網(wǎng)絡(luò)上 E_NOINTERFACE 問題的首選解決方案。但是,據(jù)我所知,某些 COM 可以使用 MTA??磥韺τ?Microsoft.Web.DLL,您需要 MTA。

所以我的解決方案是創(chuàng)建一個(gè)新線程(默認(rèn)情況下將使用 MTA),例如。

 public MainWindow()

    {

        InitializeComponent();


        //Do use ThreadPool instead of this...

        Thread thread = new Thread(new ThreadStart(() => { GetWebsites(); }));

        thread.Start();


    }


    void GetWebsites()

    {


查看完整回答
反對 回復(fù) 2021-07-18
  • 1 回答
  • 0 關(guān)注
  • 257 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號