====== DLL 가이드======
이 화면은 DLL 컴포넌트에 대한 샘플 화면이다.
DLL 컴포넌트는 DLL을 로드하고 DLL의 함수 호출 및 메시지 수신 기능을 제공하는 컴포넌트이다.
DLL 컴포넌트는 동기 모드와 비동기 모드를 지원한다.
DLL 컴포넌트는 비동기 모드는 invoke API의 모든 결과를 on_message 이벤트를 통해서 전달한다.
DLL 컴포넌트에 연동하는 DLL에는 아래의 함수가 선언되어 있어야 한다.
1. xplus_Init : DLL 컴포넌트의 init API 호출시 실행될 함수. DLL 로드후, 연동을 위한 기본 정보 설정
void* xplus_Init(LPCTSTR strComponentKey, HWND hParent);
2. xplus_Invoke : DLL 컴포넌트의 invoke API 호출시 실행될 함수. 실제 처리를 수행
LPCTSTR xplus_Invoke(void* pXPlusDllComm, LPCTSTR strFuncName, LPCTSTR strParam);
※ DLL 컴포넌트에 연동할 DLL의 샘플프로젝트는 테크넷( https://technet.softbase.co.kr/wiki/install/xf5browser_install ) 페이지의
DLL컴포넌트 연동샘플 프로젝트, DLL컴포넌트 연동샘플 DLL파일(64비트) 을 참조한다. (32비트, 64비트 구분 주의)
===== 예시 =====
템플릿 위치: /HTML5/COMPONENT/DLL/dll_basic
템플릿 파일
* [[xf5projecthome>template/screen/HTML5/COMPONENT/DLL/dll_basic.xml|dll_basic.xml]]
* [[xf5projecthome>template/screen/HTML5/COMPONENT/DLL/dll_basic.js|dll_basic.js]]
* [[xf5projecthome>template/template.html?xframe_screen_url=/HTML5/COMPONENT/DLL/dll_basic|새창으로 실행]]
echo '';
echo '';
echo '';
==== 화면 스크립트 ====
function screen_on_load()
{
this.fldSyncFunc.settext("1234ABCD가나다라1");
this.fldSyncMsg.settext("1234ABCD가나다라2");
this.fldAsyncFunc.settext("1234ABCD가나다라1");
this.fldAsyncMsg.settext("1234ABCD가나다라2");
}
///////////////////////////////////////////////////////////////////////////////////
// 동기모드(sync_mode가 true)
function btnSyncInit_on_click(objInst)
{
// 초기화
var ret = this.dllsync.init();
if (ret == true) {
this.fldSyncInitResult.settext("초기화 성공");
} else {
this.fldSyncInitResult.settext("초기화 실패");
}
}
function btnSyncCallFunc_on_click(objInst)
{
// syncmode_echo_func 함수 호출
var ret = this.dllsync.invoke("syncmode_echo_func", this.fldSyncFunc.gettext());
this.fldSyncFuncResult.settext(ret);
}
function btnSyncCallMsg_on_click(objInst)
{
// fire_on_message 함수 호출
this.dllsync.invoke("fire_on_message", this.fldSyncMsg.gettext());
}
/**
* 메시지 수신 이벤트 처리
* @param objInst DLL 컴포넌트 오브젝트
* @param strMsgName 메시지 이름
* @param strData 수신 데이터
*/
function dllsync_on_message(objInst, strMsgName, strData)
{
factory.consoleprint("strMsgName = " + strMsgName);
factory.consoleprint("strData = " + strData);
this.fldSyncMsgName.settext(strMsgName);
this.fldSyncMsgResult.settext(strData);
}
///////////////////////////////////////////////////////////////////////////////////
// 비동기모드(sync_mode가 false)
function btnAsyncInit_on_click(objInst)
{
// 초기화
this.dllasync.init();
}
function btnAsyncCallFunc_on_click(objInst)
{
// asyncmode_echo_func 함수 호출
var ret = this.dllasync.invoke("asyncmode_echo_func", this.fldAsyncFunc.gettext());
this.fldAsyncFuncResult.settext(ret);
}
function btnAsyncCallMsg_on_click(objInst)
{
// fire_on_message 함수 호출
this.dllasync.invoke("fire_on_message", this.fldAsyncMsg.gettext());
}
/**
* 모듈 로딩 완료 및 컴포넌트 초기화 결과 이벤트
* @param objInst DLL 컴포넌트 오브젝트
* @param bSucess 처리 성공 여부
*/
function dllasync_on_init(objInst, bSucess)
{
if (bSucess == true) {
this.fldAsyncInitResult.settext("초기화 성공");
} else {
this.fldAsyncInitResult.settext("초기화 실패");
}
}
/**
* 메시지 수신 이벤트 처리
* @param objInst DLL 컴포넌트 오브젝트
* @param strMsgName 메시지 이름
* @param strData 수신 데이터
*/
function dllasync_on_message(objInst, strMsgName, strData)
{
factory.consoleprint("strMsgName = " + strMsgName);
factory.consoleprint("strData = " + strData);
this.fldAsyncMsgName.settext(strMsgName);
this.fldAsyncMsgResult.settext(strData);
}