|
빌더매니아 님이 쓰신 글 :
: 오랜만입니다..
: 아쉬울때만 손내미는 '무늬만' 빌더매니압니당.. 죄송해용.. ㅡㅡ;
:
: 여기 볼랜드포럼에 질답으로 나와있는 방법대로 dll을 동적로딩해서 쓰고 있는데요,
: 문제는 프로젝트가 여러 파일로 이루어져있거든요.
: 그래서 여기저기서 파일마다 dll을 각자 로딩해서 임포트한 함수를 쓰고 있는데, 너무 불편해서요.
: 그런데 이게 dll에서 임포트한 함수이니, extern 으로 전역함수를 만들 수도 없더라구요.
:
: 제 dll은 인터페이스카드를 산 회사가 배포한 놈인데, 헤더가 없어서 lib 파일을 만들어도 소용이 없는것 아닌가요? lib파일 만들어서 프로젝트에 add해 봤는데, 그래도 임포트 된 함수가 프로젝트 매니저에 뜨지도 않아서 정적로딩도 잘 안되는 것 같아요.
:
: 어떻게 하면 한군데 파일에서만 로딩해서 다 같이 쓸 수 있을까요?
: 도와주세요 고수님들~
헤더 파일 없이 어떻게 익스포트 함수의 원형을 알았는지는 모르겠으나
일단 함수 원형을 안다고 하면 정적/동적 둘 모두 가능합니다.
동적 로딩의 경우 동일한 DLL 익스포트 함수를 여러 소스 파일에서 사용하려면 함수 포인터를 쓰면 됩니다.
DLL 내에 있는 익스포트 함수가 int _export SomeFunc(const char *str);과 같다면
이 함수를 사용할 응용프로그램에서는
//헤더 파일에
typedef int (*DllFuncType1)(const char *str);
extern DllFuncType1 DllFunc1;
//이 헤더 파일을 여기저기서 인클루드하면 됩니다.
//유닛 파일에
HINSTANCE hDLL=0;
DllFuncType1 DllFunc1=NULL
hDLL = LoadLibrary("xx.dll");
DllFunc1 = (DllFuncType1)GetProcAddress(hDLL,"_SomeFunc");
이 함수를 호출할 때는
if(DllFunc1)
{
int ret = DllFunc1("a string");
if(ret???) ??;
}
|