인스톨실드로 작업을 하다가 보면 부득이하게 외부의 기능을 사용할 때가 많습니다.
인스톨스크립트로만 해결하면 좋겠지만 지원하지 않는 기능이 있으면 어쩔수 없이 사용을 해야 되겠죠.
이번에는 C++ 만든 dll 을 호출하여 사용하는 방법에 대해 말씀드리겠습니다.
기능은 간단합니다.
두개의 int 형 변수를 넘겼을때 두변수의 합을 구하는 dll 을 호출하여 리턴값을 사용하는 방법입니다.
1>먼저 dll 만드는 코드입니다.
생성되는 dll 의 이름은 ParseString.dll 입니다. (다른 기능도 사용하느라 명명이 이렇게 되었네요)
우리가 사용할 함수의 이름은 CalSum 입니다.
소스 코드입니다.
extern "C" _declspec(dllexport) int CalSum(int number1,int number2);
extern "C" _declspec(dllexport) int CalSum(int number1,int number2)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
int ret = number1+ number2;
return ret;
}
보시면 아시겠지만 C++을 잘 모르시는 분도 누구나 이해가 가능한 코드입니다.
number1+ number2 의 값을 ret 에 할당하여 리턴해 주는 함수입니다.
2>인스톨실드상에서 호출하는 방법
- 아래 그림과 같이 Support Files/Billboard 에 dll 파일을 등록합니다.
등록 후에 스크립트 상에 아래와 같은 코드를 작성합니다.
//함수의 원형을 선언해 줍니다 parseString 내부의 CalSum 이라는 함수를 사용한다는 의미
prototype cdecl int parseString.CalSum( BYVAL INT, BYVAL INT);
*외부 함수를 호출할때 BYVAL 과 BYREF 두가지 개념이 있습니다. 첫번째는 값 자체 두번째는 포인터 같은 주소 개념입니다. 여기서는 BYVAL 을 사용했습니다.
string szDllPath ;
int nResult, retnum ;
szDllPath = SUPPORTDIR^"parseString.dll"; //호출하고자 하는 dll 의 경로를 지정해줍니다.
nResult = UseDLL(szDllPath);
if( nResult = 0 ) then //UseDll 함수는 dll 이 정상적으로 로드되었을때 0을 리턴합니다.
retnum = CalSum(1,2); //여기서 3이 리턴되면 제대로 된 결과가 나온겁니다.
endif;
UnUseDLL ( szDllPath ); //사용한 dll 은 언로드 해줍니다.
댓글 없음:
댓글 쓰기