2014-09-21 2 views
-1

원본 D7 구성 요소가 가져 오는 이상한 Twebbrowser 오류를 피하려고 XE5에 다시 컴파일해야하는 오래된 프로젝트가 있습니다. 이 코드는 D7에서는 잘 작동하지만 XE5에서는 작동하지 않습니다.델파이 7에서 XE5로 다시 컴파일 할 때 오류가 발생했습니다

function GetFrame(FrameNo: Integer; WB: TWEbbrowser): IWebbrowser2; 
    var 
     OleContainer: IOleContainer; 
     enum: IEnumUnknown; 
     unk: IUnknown; 
     Fetched: PLongint; 
    begin 
     while WB.ReadyState <> READYSTATE_COMPLETE do 
     Application.ProcessMessages; 
     if Assigned(WB.document) then 
     begin 
     Fetched := nil; 
     OleContainer := WB.Document as IOleContainer; 
     OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum); 
     Enum.Skip(FrameNo); 
     Enum.Next(1, Unk, Fetched); 
     Result := Unk as IWebbrowser2; 
     end 
     else 
     Result := nil; 
    end; 

내가 확인했고 EnumObjects에 대한 매개 변수는 두 버전 모두에서 동일하지만, XE5 말한다 "E2033. 실제와 공식 VAR 매개 변수의 유형이 동일해야합니다." 이 강아지를 어떻게 다시 컴파일 할 수 있습니까? 감사. 평화!

+0

컴파일러 오류가 발생하면 어떤 행을 생성하는지 알려주십시오. 또한 컴파일러 오류에 대한 설명서를 읽으십시오. E2033은 문서화되어있다. –

+0

줄은 OleContainer.EnumObjects (OLECONTF_EMBEDDINGS, 열거 형)입니다. –

답변

4

가변 매개 변수의 경우 실제 인수는 형식 매개 변수의 정확한 유형이어야합니다.

당신은 내가 당신의 열거 변수의 유형을 가정 할 수있다 오류가없는 유형 인 얻을 경우

enum: IEnumUnknown; 

에 : 당신은 변수 선언 섹션에서이 줄을 변경하려고 할 수 있습니다, ActiveX.IEnumUnknown

enum: ActiveX.IEnumUnknown; 
+0

예. 당신 말이 맞아요. Aleroot 대단히 감사합니다! 평화! –

+1

아마 더 깊은 조사가 현명 할 것입니다. 이 다른 IEnumUnknown이 선언 된 곳과 왜 다른 IEnumUnknown이 숨겨져 있는지 알고 싶습니다. 이상적으로 나는 가능하다면 가짜'IEnumUnknown'을 스코프에서 제거함으로써 문제를 다루는 것을 선호 할 것입니다. –

+0

나는 @ David에게 동의한다. 다른 IEnumUnknown은 MSHTML에서옵니다. Aleroot가 제안한 변경으로 인해 코드가 완벽하게 다시 컴파일되었지만 앱이 예상대로 작동하지 않습니다. 저는 하루에 몇 시간 만 열리는 정부 양식을 작성하기 위해 그것을 사용합니다. 그래서 나는 지금 그것을 시험 할 수있었습니다. 좀 더 조사해야 해. 고맙습니다. –