相关疑难解决方法(0)

如何找到COM编程ID?

我想通过后期绑定访问COM库.
我怎样才能找到它的progID?

Type oClassType = Type.GetTypeFromProgID("THE MISSING PROGID");
Run Code Online (Sandbox Code Playgroud)

.net com late-binding progid

7
推荐指数
1
解决办法
6903
查看次数

如何识别Ole对象接口?

解释我的确切情况有点困难,但我会尝试:

我正在检查通过后期绑定创建的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)

delphi com winapi ole-automation

6
推荐指数
1
解决办法
1190
查看次数

标签 统计

com ×2

.net ×1

delphi ×1

late-binding ×1

ole-automation ×1

progid ×1

winapi ×1