목차

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

템플릿 파일

화면 스크립트

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);
}