我想通过后期绑定访问COM库.
我怎样才能找到它的progID?
Type oClassType = Type.GetTypeFromProgID("THE MISSING PROGID");
Run Code Online (Sandbox Code Playgroud) 解释我的确切情况有点困难,但我会尝试:
我正在检查通过后期绑定创建的DOM接口,并在某个时候选择一个返回接口OleVariant元素的范围(我知道这肯定).
我期待一个,IHTMLElement2但它不是(我得到一个例外,该对象没有tagName属性).这让我后来怀疑(尚未测试)它的Node元素(具有nodeName属性) - 但我不想猜,并问:
if Supports(IDispatch(v), IWhatEver1)... else if Supports(IDispatch(v), IWhatEver2)...
我不知道它支持哪个界面.我怎么知道OleVariant接口对象的接口名称/ guid?
问题不仅仅是特定于DOM,例如,我有一个OleVariant是通过以下方式创建的:
SomeObject := CreateOleObject('WinHttp.WinHttpRequest.5.1');
or
SomeObject := CreateOleObject('Msxml.ServerXMLHTTP');
or
SomeObject := CreateOleObject('Msxml.XMLHTTP');
etc...
v := SomeObject;
Run Code Online (Sandbox Code Playgroud)
我以后如何知道哪个IDispatch落后v?
我希望这个问题很清楚.
似乎IE11在使用FEATURE_BROWSER_EMULATION = 8000我的应用程序时改变了它的行为- >当你在设计模式下使用TWebBrowser并选择一个范围vElement(所选范围中的元素)返回为JScriptTypeInfo...我不知道为什么,我不知道还是如何处理这个bs,但至少我知道我有哪个界面!
这是我用来检查元素的代码:
if SysUtils.Supports(IUnknown(vElement), IDispatch, LDispatch) then
begin
debug('vElement Supports IDispatch');
if LDispatch.GetTypeInfo(0, 0, ti) = S_OK then
if ti.GetDocumentation(MEMBERID_NIL, @pbstrName, @pbstrDocString, nil, nil) = S_OK then …Run Code Online (Sandbox Code Playgroud)