C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[26197] Re:dll 에서 import한 함수를 전역함수로 쓰고 싶은데요..
임문환.실업자 [origin] 1215 읽음    2003-07-03 06:09
빌더매니아 님이 쓰신 글 :
: 오랜만입니다..
: 아쉬울때만 손내미는 '무늬만' 빌더매니압니당.. 죄송해용.. ㅡㅡ;
:
: 여기 볼랜드포럼에 질답으로 나와있는 방법대로 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???) ??;
}


+ -

관련 글 리스트
26194 dll 에서 import한 함수를 전역함수로 쓰고 싶은데요.. 빌더매니아 728 2003/07/03
26197     Re:dll 에서 import한 함수를 전역함수로 쓰고 싶은데요.. 임문환.실업자 1215 2003/07/03
26216         Re:Re:dll 에서 import한 함수를 전역함수로 쓰고 싶은데요.. 빌더매니아 841 2003/07/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.