ludin's story

kaludin.egloos.com

포토로그 마이가든



ATL로 만든 녀석의 함수 호출을 하고싶어서요 0



출처 : ATL로 만든 녀석의 함수 호출을 하고싶어서요






질문

ATL로 프로퍼티 추가로 인자를 받는 ut_szNickName,ut_szUserID를 만들었고

전달받은 인자를 모아서 에플리케이션을 호출하는 녀석인 RunApp를 메소드로 만들었습니다.

cab(설치파일, inf, dll요렇게 세개.. 설치파일은 따로 ftp에 놓으라하시지만 일단..이렇게.ㅠㅠ)

으로 묶어서 코드사인까지 처리 하였습니다.

-inf파일-

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

 

[Add.Code]

Launcher.dll=Launcher.dll

REClientSetup.exe=REClientSetup.exe

 

[Launcher.dll]

file-win32-x86=thiscab

clsid={9F4308D6-9DC9-4AF9-B350-517FCDCD42EF}

RegisterServer=yes

FileVersion=1,0,0,1

destdir=11

 

[REClientSetup.exe]

file-win32-x86=thiscab

FileVersion=7,1,100,1248

destdir=11

 

 

그리고 아래와 같이 웹페이지에서 호출을 하니 안되는군요..

 

 

1.자바스크립트로 하면 상호참조가 어떻다고 나오고..

       <Object

              ID="WebLauncher"

              ClassID="clsid:9F4308D6-9DC9-4AF9-B350-517FCDCD42EF"

              Codebase="WebLauncher.cab#version=1,0,0,1"

              Align="Center" Width="0" Height="0" Hspace="0" Vspace="0"

        >

 

        <script language=javascript>

            WebLauncher.put_szNickName="nickname";

            WebLauncher.put_szUserID="userid";

            WebLauncher.AppCall();

        </script>

 

2.그냥 param으로 넘길려니.. 메소드로 만든 RunApp함수를 호출하는법을 몰라서 이렇게 질문 드립니다.

 

       <Object

              ID="WebLauncher"

              ClassID="clsid:9F4308D6-9DC9-4AF9-B350-517FCDCD42EF"

              Codebase="WebLauncher.cab#version=1,0,0,1"

              Align="Center" Width="0" Height="0" Hspace="0" Vspace="0"

        >

        <Param Name="AutoLaunch" Value="1">

        <Param Name="put_szNickName" Value="nickname">

        <Param Name="put_szUserID" Value="userid">

        </Object>

 

답변들

header 파일에 추가해야 되는 것들이 있습니다.

 

아래 제가 만들었던거에서 붉은 색 부분을 보시면 됩니다.

 

class ATL_NO_VTABLE CSetReg :

    public CComObjectRootEx<CComSingleThreadModel>,

    public IDispatchImpl<ISetReg, &IID_ISetReg, &LIBID_P3SETCTRLLib>,

    public CComControl<CSetReg>,

    public IPersistStreamInitImpl<CSetReg>,

    public IOleControlImpl<CSetReg>,

    public IOleObjectImpl<CSetReg>,

    public IOleInPlaceActiveObjectImpl<CSetReg>,

    public IViewObjectExImpl<CSetReg>,

    public IOleInPlaceObjectWindowlessImpl<CSetReg>,

    public CComCoClass<CSetReg, &CLSID_SetReg>,

    public IPersistPropertyBagImpl<CSetReg>, // 요넘의 프로퍼티 추가

    public IObjectSafetyImpl<CSetReg, INTERFACESAFE_FOR_UNTRUSTED_CALLER |                                         INTERFACESAFE_FOR_UNTRUSTED_DATA> // 요넘은 안정성을 위한

 

BEGIN_PROP_MAP(CSetReg)

    PROP_ENTRY("SetTest", 1, CLSID_SetReg)

 

 그리고 가장 중하다고 할 수 있는...

 

STDMETHODIMP Load(LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog); //요 함수를 임플 하시기 바랍니다.

 

그리고 나서 Load 함수 내용에

 

pPropBag->Read(L"SetTest", &var, pTest);

put_SetTest(var.bstrVal);

 

하시면 됩니다




트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://kaludin.egloos.com/tb/2464179 [도움말]

덧글

덧글 입력 영역



:: 배경음악 ::

1. 성시경-추억이 들린다 2. 씨야-사랑의 인사
Candle