외부 모듈(Extension DLL)을 사용하기 위해서는 지정된 절차에 따라 확장 모듈(DLL)을 만들어야 합니다. 새로 모듈을 만들거나 기존 모듈을 사용하기 위해 필요한 내용을 설명합니다.
개발 환경
넥사크로플랫폼에서 사용할 수 있는 외부 모듈을 만들기 위해서는 아래와 같은 도구와 라이브러리가 필요합니다.
마이크로소프트 비주얼 스튜디오 2005
비주얼 스튜디오 버전이 2005보다 높은 경우에는 플랫폼 도구 집합을 v80으로 빌드합니다.
V8 자바스크립트 엔진
프로젝트 생성과 설정
프로젝트 생성
[새 프로젝트]를 실행 후 [템플릿 > Visual C++ > Win32] 항목에서 [Win32 프로젝트]를 선택합니다. 이름 항목에 프로젝트 이름을 넣고 [확인]을 클릭합니다.
설정 확인 후 [다음] 버튼을 클릭합니다.
[응용 프로그램 설정]에서 응용 프로그램 종류에서 DLL을 선택하고 [마침] 버튼을 클릭합니다.
프로젝트 설정
[추가 포함 디렉터리]에 V8 Javascript Engine의 v8.h 경로를 추가합니다.
[추가 종속성’에 'v8.lib'를 추가합니다.
[추가 라이브러리 디렉터리]에 [추가 종속성]에 있는 v8 Lib의 경로를 추가합니다.
확장 모듈 제작
넥사크로플랫폼 엔진에서는 확장 모듈의 ExtensionInitialize 정보를 읽고 설정합니다. ExtensionInitialize에서는 DLL에 필요한 초기화 작업과 attach 오브젝트와 같은 function 포인터 값을 설정합니다.
Entry Funcs
v8::Object에 v8::Function 을 설정하는 함수를 지정합니다.
typedef bool (*pFnAttachObject)( v8::Handle<v8::Object>*);
Initialize
초기화 단계에서는 아래와 같은 작업을 처리합니다.
넥사크로플랫폼에서 nexacro._addExtensionModule 함수로 확장 모듈을 로 처음 로드할 때 호출됩니다.
nexacro._clearExtensionModule 함수가 호출되기 전까지 호출되지 않습니다.
확장모듈에서 초기화에 필요한 작업들을 진행합니다.
extern "C" __declspec(dllexport) bool ExtensionInitialize()
EntryPoint
EntryPoint 단계에서는 아래와 같은 작업을 처리합니다.
EXTENSIONENTRYFUNCS를 설정합니다.
넥사크로플랫폼에서 nexacro._addExtensionModule 함수로 매번 호출되며 인자로 넘어온 자바스크립트 오브젝트에 v8::Function 등을 설정합니다.
extern "C" __declspec(dllexport) bool ExtensionEntryPoint(EXTENSIONENTRYFUNCS*)
Shutdown
넥사크로플랫폼에서 nexacro._clearExtensionModule을 통해 호출됩니다.
확장 모듈을 더 이상 사용하지 않을 때 필요한 작업을 진행합니다.
extern "C" __declspec(dllexport) void ExtensionShutdown()
넥사크로플랫폼 API
확장 모듈 개발과 관련된 넥사크로플랫폼 API는 아래와 같습니다.
nexacro._addExtensionModule
확장 모듈 로딩 시 사용하는 API 입니다.
nexacro._addExtensionModule = function(object, modulepath)
Argument | 설명 |
---|---|
object | 확장 모듈의 속성, 함수 등을 저장하는 오브젝트 |
modulepath | 확장 모듈의 전체 경로를 지정합니다. 넥사크로플랫폼에서 지원하는 Path Alias를 사용할 수 있습니다. |
var ext = {}; nexacro._addExtensionModule(ext, "c:/extension.dll"); nexacro._addExtensionModule(ext, "%COMPONENT%\extension.dll");
nexacro._clearExtensionModule
확장 모듈을 더 이상 사용하지 않고 로딩된 모듈을 내려야 할 때 사용하는 API 입니다.
nexacro._clearExtensionModule = function(modulepath)
Argument | 설명 |
---|---|
modulepath | 내려야 하는 확장 모듈의 전체 경로를 지정합니다. 넥사크로플랫폼에서 지원하는 Path Alias를 사용할 수 있습니다. 값을 주지 않는다면 로딩된 확장 모듈을 모두 내립니다. |
nexacro._clearExtensionModule 함수로 제거된 확장 모듈의 오브젝트를 계속 사용할 경우 메모리 누수(memory leak)가 발생할 수 있으므로 로딩되지 않은 모듈의 오브젝트를 사용하면 안됩니다.