Q&A

  • 브라우져 띄우기에서 에러...
아래 소스에서 문제가 발생합니다.

IdTCPServer 컴포넌트의 Execute 이벤트에서 호출하면 여지없이

<... class EOleSysError. 'CoInitialize를 호출하지 않았습니다.'>

라고 에러가 발생하는 군요.



교육을 위한 프로그램으로 강사가 싸이트 URL을 지정해서 전송하면

전송받은 유저 측에선 브라우져를 띄우는 형태입니다.

유저측에서 일반적인 형태로 버튼을 눌러 호출하면 브라우져가 잘 뜹니다.

하지만...패킷을 받아 처리하는 IdTCPServer.Excute에서 호출하면 바로 에러가

발생하네요.

왜 이럴까요?





procedure myGotoURL(sURL: string);

const

csOLEObjName = 'InternetExplorer.Application';

var

IE : Variant;

WinHanlde : HWnd;

begin

if( VarIsEmpty( IE ) )then

begin

IE := CreateOleObject( csOLEObjName ); // <-- 에러발생!!!

IE.Visible := true;

IE.Navigate( sURL );

end else

begin

WinHanlde := FindWIndow( 'IEFrame', nil );

if( 0 <> WinHanlde )then

begin

IE.Navigate( sURL );

SetForegroundWindow( WinHanlde );

end else

begin

// handle error ...

end;

end;

end;

1  COMMENTS
  • Profile
    황보용 2000.12.19 00:10
    황보용 wrote:



    대충보니...Indy 컴포넌트의 쓰레드에서 ole객체 생성과정에서 일어난 문제인듯 하기도

    하구요...

    거의 꽁수로 해결은 했지만...매끈하지가 않습니다. 삽질이였거든요.

    필요한 인자를 에디트박스에 출력한후 타이머를 enable 시켜 ole 생성을 했습니다.

    아우우...이런 멍청한 꽁수말고 좋은 방법이 없을까요?



    > 아래 소스에서 문제가 발생합니다.

    > IdTCPServer 컴포넌트의 Execute 이벤트에서 호출하면 여지없이

    > <... class EOleSysError. 'CoInitialize를 호출하지 않았습니다.'>

    > 라고 에러가 발생하는 군요.

    >

    > 교육을 위한 프로그램으로 강사가 싸이트 URL을 지정해서 전송하면

    > 전송받은 유저 측에선 브라우져를 띄우는 형태입니다.

    > 유저측에서 일반적인 형태로 버튼을 눌러 호출하면 브라우져가 잘 뜹니다.

    > 하지만...패킷을 받아 처리하는 IdTCPServer.Excute에서 호출하면 바로 에러가

    > 발생하네요.

    > 왜 이럴까요?

    >

    >

    > procedure myGotoURL(sURL: string);

    > const

    > csOLEObjName = 'InternetExplorer.Application';

    > var

    > IE : Variant;

    > WinHanlde : HWnd;

    > begin

    > if( VarIsEmpty( IE ) )then

    > begin

    > IE := CreateOleObject( csOLEObjName ); // <-- 에러발생!!!

    > IE.Visible := true;

    > IE.Navigate( sURL );

    > end else

    > begin

    > WinHanlde := FindWIndow( 'IEFrame', nil );

    > if( 0 <> WinHanlde )then

    > begin

    > IE.Navigate( sURL );

    > SetForegroundWindow( WinHanlde );

    > end else

    > begin

    > // handle error ...

    > end;

    > end;

    > end;