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
[67099] Re:dll 정적 로드관련해서..
aaa [] 1330 읽음    2012-05-02 21:45
시온 님이 쓰신 글 :
: 빌더 개발 안내서를 참조하여... dll 정적 로드를 테스트 하려고 했으나.. 원활하게 진행이 안되서 도움을 얻고자 글을 씁니다..
:
: 안내서에서는..
:
: C++Builder 애플리케이션이 로드될 때 DLL을 정적으로 로드하려면 연결 시 DLL의 임포트 라
: 이브러리 파일을 C++Builder 애플리케이션에 연결합니다. 임포트 라이브러리를 C++Builder
: 애플리케이션에 추가하려면 Project|Add를 클릭하고 추가할 .LIB 파일을 선택하십시오.
: 그러면 해당 DLL의 엑스포트된 함수를 애플리케이션에서 사용할 수 있게 됩니다. 다음과 같
: 이 __declspec (dllimport) 변경자를 사용하여 애플리케이션이 사용하는 DLL 함수의 프로
: 토타입을 만듭니다.
: __declspec(dllimport) return_type imported_function_name(parameters);
:
: 이런식으로 사용하라고 적혀있었습니다..
:
: * DLL 코딩 (Project1.dll, Project1.lib)
:
: #pragma hdrstop
: #pragma argsused
:
: extern "C" int _libmain(unsigned long reason)
: {
:     return 1;
: }
: extern "C" __declspec(dllexport) int changeValue(int value)
: {
:     return value * value;
: }
:
: * 호출 (Project|Add -> Project1.lib 추가했음)
:
: extern "C" __declspec(dllimport) int changeValue(int value);
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
:     ShowMessage(IntToStr(changeValue(6)));
: }
:
: 버튼을 클릭하면 Access violation at address 00000000. Read of address 00000000................
:
: 생각처럼 잘 안되네요..
:
: 문제점을 이해하기 쉽게 자세히 적어주시면 감사하겠습니다. (__)

로드 하실때
extern "C" __declspec(dllimport) int changeValue(int value);
이걸로해선안됩니다 이건 dll  내부에 적히는것일 뿐입니다

프로젝트에 함수가저올때는 GetProcAddress 함수로 불러오게됩니다
lib파일이 꼭필요한지는 모르겠네요
 typedef int (PROCNAME *) __declspec(dllexport __stdclall)(int value);
 윗부분은 좀 헷갈리네요 코딩안한지 좀 되서..딴분이 수정하실듯

 void __fastcall TForm1::Button3Click(TObject *Sender)
 {
     HINSTANCE dll
    dll = LoadLiblary("Project1.dll");
    PROCNAME ChangeValues = (PROCNAME)GetProcAddress(dll,"ChangeValue");
    ShowMessage(IntToStr(changeValue(6)));
    delete dll;
 }

정확하게쓴건지는 .. 틀린부분이있으나
dll 에함수는 이런식으로 불러옵니다
lib 라이브러리 파일로 쓰면 이런식이 아니겠지만
dll 이라면 위처럼 쓰겠지요
비주얼C++ 에서만든 dll이면 변환해서쓰시면되겟네요

+ -

관련 글 리스트
67098 dll 정적 로드관련해서.. 시온 1143 2012/05/02
67100     Re:dll 정적 로드관련해서.. aaa 1104 2012/05/02
67099     Re:dll 정적 로드관련해서.. aaa 1330 2012/05/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.