我們已經創建了自己的實施IXMLHttpRequest
在COM服務器(.exe)的,像這樣:錯誤註冊COM服務器時,接口從IXMLHttpRequest
interface IMyXMLHttpRequest : IXMLHttpRequest {
...
};
coclass MyXMLHttpRequest {
[default] interface IMyXMLHttpRequest;
};
問題是構建嘗試時,註冊COM服務器,我們得到錯誤「訪問OLE註冊表錯誤」。我調試了註冊碼,它在RegisterTypeLib
中失敗。它看起來像試圖拉入與IXMLHttpRequest
有關的一些類型信息,並且(在這裏猜測)不能改變與該接口相關的一些註冊表項。
從IXMLHttpRequest
得出的結論是否是錯誤的?我們是否應該從IDispatch
中派生出來,讓我們的課程使用雙接口?或者是否有可能從IXMLHttpRequest
派生出來,我們只是做錯了?
更新:我上傳了reproducible test case。我只是使用Visual Studio嚮導生成一個ATL COM服務器,然後我創建了一個從IXMLHttpRequest
派生的新接口和一個實現它的coclass。正如我所描述的,註冊失敗。如果我更改界面從IDispatch
派生,那麼它工作正常。使用Visual Studio 2010在Windows 7上重現100%,使用提升的權限運行。
這個項目對我來說太難以理解了。您的測試程序是一個進程外服務器。你的.rgs文件是空的。您沒有在資源中嵌入類型庫。不知道你在做什麼。 –
我們正在開發問題的應用程序使用進程外服務器。我不確定這有什麼奇怪的。我上傳的項目完全是* Visual Studio 2010生成的樣板文件(包括空的.rgs),只修改了.idl文件。我不知道爲什麼類型庫需要嵌入資源中。只需在VS 2010中打開項目,生成併發生錯誤。對我來說,這是一個可重複的測試案例應該做的。 –
關於類型庫:我的(很可能是錯誤的)理解是.idl文件用於生成嵌入到.exe資源中的類型庫。當我在Visual Studio中打開它時,我當然可以在.exe中看到一個類型庫。我以爲只有在使用通過其他方式獲得的類型庫(即不是從項目中的.idl文件編譯)時才需要在資源中嵌入類型庫。我誤解了什麼嗎? –