0
ms-word의 핸들을 얻은 다음 AccessibleObjectFromEvent를 사용하여 IDispatch (늦은 bingding)을 얻습니다. 그 속성 또는 메소드를 호출하려는 경우 실패합니다.AccessibleObjectFromEvent.call에 의해 idispatch의 멤버가 얻는 idispatch 인터페이스
하지만 괜찮습니다. C#.
How to use use late binding to get excel instance?
이 같은 코드입니다.
function GetProperty(dispobj: IDispatch; PropertyName: widestring;
var retvalue: IDispatch): Boolean;
var
hr: HResult;
DispId1: Integer;
value: Variant;
params: TDispParams;
begin
Result := false;
hr := dispobj.GetIDsOfNames(GUID_NULL, @(PropertyName), 1,
LOCALE_SYSTEM_DEFAULT, @DispId1);
if (hr >= 0) then begin
hr := dispobj.Invoke(DispId1, GUID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, params, @value, nil, nil);
if (hr >= 0) then begin
retvalue := value;
Result := true;
end;
end;
end;
hWindow := GetWordHandle(Trim(LabeledEdit1.Text));
hWindow := GetChildWndHandle(hWindow, '_WwG');
if `AccessibleObjectFromWindow`(hWindow, 0, IID_IDispatch, WordObject) = S_OK then begin
//GetProperty(WordObject, 'Application', WordApp);
// WordObject.GetTypeInfoCount(nCount);
//Showmessage(IntToStr(nCount));
//WordApplication1.ConnectTo((WordObject.Application) as _Application);
// Showmessage(WordObject.Application.Version)
OleCheck(WordObject.QueryInterface(IID_IDispatch, WordApp));
WordApplication1.ConnectTo(IDispatch(WordApp) as _Application);
Showmessage(WordApplication1.Version)
end
.? 어떤 코드 줄? 오류 메시지 란 무엇입니까? David의 질문에 덧붙여 –
, 어떤 오피스 버전입니까? – whosrdaddy
@DavidHeffernan WordApp 또는 Word 개체에 관계없이 "인터페이스가 지원되지 않습니다." 예외가 발생합니다. WordApplication1.ConnectTo (IDispatch (WordObject) as _Application); 그래서, WordApplication1.ConnectTo를 사용하여 IDispatch를 연결하는 방법이 있습니까? – chenybin