From YYpBD's MediaWiki
보통은 VC에서 Dll을 만든 다음 생성된 Lib를 이용해서 정적 연결해서 이용한다.
하지만 dll이 없다거나 할때 에러처리가 난감하다
머 방법이 없는 것은 아니나 메인 어플 자체가 안뜰 경우가 있으므로 LoadLibrary가 더 유용할 수 있겠다.
우선 VC에서 dll을 만들어본다.
dll 프로젝트를 만들고
#define DllExport __declspec( dllexport )
extern "C"
{
DllExport int Subtract( int a, int b )
{
return a-b;
}
}
머 테스트니 간단하게 코딩한다.
호출하는 쪽에서 바꿀수 있으니 stdcall과 cdecl등 호출 규칙은 알아서 한다 -_-;;;
그리고 exports.def에
EXPORTS
Subtract;
를 추가한다.
[BCB에서 이용하기]
HINSTANCE hVCDll;
int ( __cdecl* Subtract )(int a, int b);
hVCDll = LoadLibrary( "VCTestDll.dll" );
Subtract = (int (__cdecl*)(int a, int b))GetProcAddress(hVCDll, "Subtract");
ShowMessage( IntToStr(Subtract(2, 3)) );
FreeLibrary( hVCDll );
디파인으로 타입을 지정하면 더 편하게 쓸 수 있다.
[Delphi에서 이용하기]
type
TSubtract = function(a, b: integer): integer; cdecl;
var
hVCDll: HINST;
Subtract: TSubtract;
begin
hVCDll := LoadLibrary( 'VCTestDll.dll' );
@Subtract := GetProcAddress( hVCDll, 'Subtract' );
ShowMessage( IntToStr(Subtract(2, 3)) );
FreeLibrary( hVCDll );
[VC에서 이용하기]
HINSTANCE hVCDll;
char sTemp[20];
int ( __cdecl* Subtract )(int a, int b);
hVCDll = LoadLibrary( "VCTestDll.dll" );
Subtract = (int (__cdecl*)(int a, int b))GetProcAddress(hVCDll, "Subtract");
sprintf( sTemp, "%d", Subtract(2, 3) );
AfxMessageBox( sTemp, MB_OK|MB_ICONINFORMATION, 0 );
FreeLibrary( hVCDll );