- 작성시간 : 2009/10/26 23:53
- 퍼머링크 : kaludin.egloos.com/2464179
- 카테고리 : 『C/C++』
출처 : 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);
하시면 됩니다



덧글