Q&A

  • ActiveX의 STA/MTA - 익스에서 새창띄울 경우
안녕하세요!



일반 어플리케이션을 ActiveX 로 옮기고 있습니다. 델파이로 짰던

것이라 ActiveForm을 이용해서 개발하고 있는데요, 미디어 플레이어

같은 프로그램이라서 웹페이지 등에 삽입하는 형태로 주로 사용하게

될 예정이고, 익스플로러를 여러 개 띄워서(iexplore.exe을 실행시켜서)

OBJECT로 넣어보면 문제가 없습니다.



그런데, CTRL+N을 눌러 새창을 띄우면 모든 전역 변수를 공유하더군요!

그것 때문에 폼이나 제 프로그램 중 전역 변수를 쓰는 부분에서 문제가

생깁니다.



새창을 띄우면 MTA로 ActiveX를 쓰는것 때문인것 같은데요, 제가 사용하는

모든 전역 변수를 폼 아래로 집어넣으면 일단 큰 문제들은 없어지더군요.



그래서, 잘 되는줄 알았더니 팝업 메뉴가 안뜨는겁니다!



살펴보니 PopUpMenu에 PopupList 라는 전역변수가 있더군요. 사실상 필요가

없는 것이여서 로컬로 바꿀 수가 있었는데요, 팝업 메뉴 같은 VCL을 포함해서

제가 사용하고 있는 유닛(Windows, Messages, ...)들 안에 있는 전역변수는

어째야 합니까? 모두 뒤져서 전역 변수들을 찾아서 없애야 하나요?



아무리 생각해도 다른 분들도 이렇게 하셨을것 같지 않습니다.



델파이 프로그래머 여러분, 익스에서 새창 띄울 때는 어떻게 하셨습니까?



한델연과 델코, 그리고 델마당... ActiveX에 관련된 거의 모든글을

읽어보았지만 해결책이 없네요 ㅠ_ㅠ



2  COMMENTS
  • Profile
    AKIMA 2001.01.14 06:21
    어디 부터 답변을 드려야 할지..

    ActiveX 가 무엇인고?? 정말 편하구 대단한 것 같아 보이기는 하는데..말입니다..

    이해가 안가는건 어떻게 사용하셨는지 인데? 전연 변수를 어디에 선을 했는데..폼으로 옳기셨다는 이야기인지...

    잘 감이 안잡히네요...

    확실한 건 ATL 에서 사용하는 범위와 델파이에서 사용하는 벙위 그리고 C builder 에서 사용할 수 있는 범위가 차이가 있다는 겁니다.

    그래서 몰 좀 멋진걸 함 할라구 치면 꼭 말썽을 부리니까요...



    저의 경험에 비추어 보면 방범이 전혀 없는건 아닙니다. 일단 어플리케이션에서 사용한 소스를 그대로 사용하는데는 무리가 있다는 겁니다. 그래서 중요한 메소드는 타입라이브러리에서 재선언하구, 사용하시는 것이 좋은 방법입니다. 왜냐하면 ActiveX 가 모두 COM 기반이니까, COM 프로그램을 하듯이 MTA 이건 STA 이건 관계 없습니다. 모두 Apartment 라는 넘이 그런걸 무시하고 새로운 개념으로 스레드를 관리 하다고 보면 되거든요..근데 문제가 생기는 이유를 예상 해보면 그 익스프로러도 COM server 라는 겁니다. 그래서 정확한 사용이 필요한데....암튼.....



    이야기가 이론적인데 그칠 수 밖에 없네요...구체적인 상황을 함 다시 올려 봐요...

    엑티브엑스의 고충은 역시 해 본 사람만이 알줘^^





    최의종 wrote:

    > 안녕하세요!

    >

    > 일반 어플리케이션을 ActiveX 로 옮기고 있습니다. 델파이로 짰던

    > 것이라 ActiveForm을 이용해서 개발하고 있는데요, 미디어 플레이어

    > 같은 프로그램이라서 웹페이지 등에 삽입하는 형태로 주로 사용하게

    > 될 예정이고, 익스플로러를 여러 개 띄워서(iexplore.exe을 실행시켜서)

    > OBJECT로 넣어보면 문제가 없습니다.

    >

    > 그런데, CTRL+N을 눌러 새창을 띄우면 모든 전역 변수를 공유하더군요!

    > 그것 때문에 폼이나 제 프로그램 중 전역 변수를 쓰는 부분에서 문제가

    > 생깁니다.

    >

    > 새창을 띄우면 MTA로 ActiveX를 쓰는것 때문인것 같은데요, 제가 사용하는

    > 모든 전역 변수를 폼 아래로 집어넣으면 일단 큰 문제들은 없어지더군요.

    >

    > 그래서, 잘 되는줄 알았더니 팝업 메뉴가 안뜨는겁니다!

    >

    > 살펴보니 PopUpMenu에 PopupList 라는 전역변수가 있더군요. 사실상 필요가

    > 없는 것이여서 로컬로 바꿀 수가 있었는데요, 팝업 메뉴 같은 VCL을 포함해서

    > 제가 사용하고 있는 유닛(Windows, Messages, ...)들 안에 있는 전역변수는

    > 어째야 합니까? 모두 뒤져서 전역 변수들을 찾아서 없애야 하나요?

    >

    > 아무리 생각해도 다른 분들도 이렇게 하셨을것 같지 않습니다.

    >

    > 델파이 프로그래머 여러분, 익스에서 새창 띄울 때는 어떻게 하셨습니까?

    >

    > 한델연과 델코, 그리고 델마당... ActiveX에 관련된 거의 모든글을

    > 읽어보았지만 해결책이 없네요 ㅠ_ㅠ

    >

  • Profile
    최의종 2001.01.14 07:24
    답글 남겨주셔서 정말 감사합니다.



    좀 자세히 적어볼게요 ^^;



    그럼!









    AKIMA wrote:

    > 어디 부터 답변을 드려야 할지..

    > ActiveX 가 무엇인고?? 정말 편하구 대단한 것 같아 보이기는 하는데..말입니다..

    > 이해가 안가는건 어떻게 사용하셨는지 인데? 전연 변수를 어디에 선을 했는데..폼으로 옳기셨다는 이야기인지...

    > 잘 감이 안잡히네요...

    > 확실한 건 ATL 에서 사용하는 범위와 델파이에서 사용하는 벙위 그리고 C builder 에서 사용할 수 있는 범위가 차이가 있다는 겁니다.

    > 그래서 몰 좀 멋진걸 함 할라구 치면 꼭 말썽을 부리니까요...

    >

    > 저의 경험에 비추어 보면 방범이 전혀 없는건 아닙니다. 일단 어플리케이션에서 사용한 소스를 그대로 사용하는데는 무리가 있다는 겁니다. 그래서 중요한 메소드는 타입라이브러리에서 재선언하구, 사용하시는 것이 좋은 방법입니다. 왜냐하면 ActiveX 가 모두 COM 기반이니까, COM 프로그램을 하듯이 MTA 이건 STA 이건 관계 없습니다. 모두 Apartment 라는 넘이 그런걸 무시하고 새로운 개념으로 스레드를 관리 하다고 보면 되거든요..근데 문제가 생기는 이유를 예상 해보면 그 익스프로러도 COM server 라는 겁니다. 그래서 정확한 사용이 필요한데....암튼.....

    >

    > 이야기가 이론적인데 그칠 수 밖에 없네요...구체적인 상황을 함 다시 올려 봐요...

    > 엑티브엑스의 고충은 역시 해 본 사람만이 알줘^^