问题将idl转换为tlb

时间:2011-01-09 21:52:15

标签: c#

我尝试在firefox中获取所选文本和鼠标下的单词

经过大量搜索后,我得到的解决方案是我必须使用IAccessible在Firefox中访问文档的HTML

我在这个链接中找到了c ++中的解决方案 How to access a document's HTML in Firefox using IAccessible

解决方案使用ISimpleDOMNode.idl文件,因此将该解决方案从c ++转换为c#的第一步是转换

ISimpleDOMNode.idl到tlb文件并将tlb转换为dll填充

我尝试使用此命令的VS命令提示符转换为tlb文件 midl ISimpleDOMNode.idl

但是生成了ISimpleDOMNode.h和ISimpleDOMDocument.h,它们定义了接口。它还创建了ISimpleDOMNode_i.c和ISimpleDOMDocument_i.c,但是没有tlb文件

有什么不对?

这是ISimpleDOMNode.idl文件的链接

http://www.4shared.com/file/MddCFmXa/ISimpleDOMNode.html

1 个答案:

答案 0 :(得分:1)

interface ISimpleDOMNode : IUnknown {
    // etc..
}

这就是降压停止的地方,IUnknown派生接口不兼容自动化。它们可以从C ++代码中使用,请注意midl生成的.h文件和.idl文件中的cpp_quote()数量。自动化兼容的COM接口派生自IDispatch,并使用自动化兼容类型的子集作为函数参数。 Variant,BSTR和SafeArray是很受欢迎的选择。

从技术上讲,可以在C#代码中重新声明接口类型,你只是没有得到类型库的任何帮助来实现这一点。你必须处理无多重继承问题(不是这个问题)。没有类型库,Tlbimp.exe无能为力。

使用C ++ / CLI实现此目的,您可以编写一个ref类包装器,并且可以#include .h文件。