我们已经创建了自己的实施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文件编译)时才需要在资源中嵌入类型库。我误解了什么吗? –