簡體   English   中英

調用 COM 服務器,C++ CoCreateInstance 拋出“不支持此類接口”,C# 工作正常

[英]Calling COM server, C++ CoCreateInstance throws "No such interface supported", C# works without issue

我正在嘗試重寫一些調用本地 COM 服務器的代碼,從 C# 到 C++。C# 代碼可以正常工作。 關鍵部分是:

Guid lr_FactoryGuid = Guid.Parse("AE7CFA4B-985A-4F76-8CC6-2011649FC8A9");
Guid lr_FactoryClass = Guid.Parse("1CA0D073-4ABB-4D06-B318-BFFDE38E4903");

IntPtr lk_FactoryPtr = new IntPtr();
CoGetClassObject(
    ref lr_FactoryClass, 
    4, 
    new IntPtr(), 
    ref lr_FactoryGuid, 
    out lk_FactoryPtr);

if (lk_FactoryPtr == IntPtr.Zero)
{
    MessageBox.Show("lk_FactoryPtr  == IntPtr.Zero");
    return false;
}

我試圖將其重寫為 C++,但我無法比這里更進一步,錯誤顯示為“不支持此類接口”:

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

CLSID clsid;
HRESULT hr = CLSIDFromString(L"{1CA0D073-4ABB-4D06-B318-BFFDE38E4903}", &clsid);

CLSID iid;
hr = CLSIDFromString(L"{AE7CFA4B-985A-4F76-8CC6-2011649FC8A9}", &iid);

void* pIFace;
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, iid, &pIFace);

if (!SUCCEEDED(hr))
{
    _com_error err(hr);
    LPCTSTR errMsg = err.ErrorMessage();
    
    MessageBox(NULL, errMsg, L"SiteKiosk demo", MB_ICONEXCLAMATION | MB_OK);
}

有一個 .tlb 文件,我用來為 C# 生成互操作 DLL 並導入到 C++ 中,但是它目前已從 C++ 中注釋掉,以試圖使代碼更小,我仍然從 CoCreateInstance 中得到這個錯誤。

我調用的 COM 應用程序是一個 32 位應用程序,因此我的 C# 和 C++ 客戶端應用程序也是 32 位的。 兩個客戶端都是 Windows 控制台應用程序。

為了讓 C++ 正常工作,我還需要設置/做些什么嗎?

漢斯的建議解決了這個問題,我使用了 CoGetClassObject 和代碼的 rest 然后點擊到位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM