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
[66463] Re:Re:Re: RAD 툴에서 VC로 만든 64비트 DLL 사용
Lyn [tohnokanna] 1414 읽음    2012-02-29 15:59
라이브러리 링크 한 코드 보여주세요

라이브러리 님이 쓰신 글 :
: 우선 답변에 감사합니다!! ^^
:
: 우아.. 굉장히 복잡해 지네요....
:
: 그럼 만약에 32비트로 바꿔서 사용한다면 저런 절차없이 그냥 사용이 가능한가요??
:
: 그런데 32비트 dll을 implib로 lib 생성해서 프로그램 실행했더니
: (링커 설정, RTL체크 끄고/키고...)
:
:
: #include "Unit1.h"
: #include "UniDAQ.h"
:
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm1 *Form1;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
:     : TForm(Owner)
: {
:     Ixud_DriverClose();
: }
: //---------------------------------------------------------------------------
:
:
:
: -----------------------------------------------------------------------------
: [Linker Error] Error: Unresolved external 'Ixud_DriverClose' referenced from (경로)...\DEBUG_BUILD\UNIT1.OBJ
:
: 라는 링커 에러가 나옵니다... 그냥 사용은 불가능 한 건가요??;;; 에겅;;
:
: 빌더 님이 쓰신 글 :
: : 라이브러리 님이 쓰신 글 :
: : : 라이브러리 프로젝트 추가시
: : : [Linker Error] Error: ' contains invalid OMF record, type 0x21 (possibly COFF)
: : :
: : : 라는 에러 메시지가 나옵니다... COFF는 VC++ 라이브러리라 바꿔 줘야 한다고 검색해보니 나오는 것
: : :
: : : 같더라구요... 그런데 어떻게 바꿔줘야 할지... ㅠㅠ.. 바꿔도 이상하게 되는 것같아 도움 요청합니다...
: : :
: : : 라이브러리 나름 바꾸고 나니 함수에러가 나더라구요...
: : : [Linker Error] Error: Unresolved external 'Ixud_DriverClose' referenced from
: : :
: : : 저 에러는 함수를 제대로 찾을 수 없다고 하는것같던데...
: : :
: : : 어떻게 해줘야 할지 막막합니다 ㅠㅠ;;
: : :
: : : 빌더에서 사용가능하게끔 변환시켜주시면 감사하겠습니다..
: : :
: : : 오전안으로 써봐야 해서... 빠르게 부탁드립니다!!! ㅠㅠ
: :
: :
: :
: :
: :
: : 답변:
: :
: : RAD 툴에서는 64비트 C++ 컴파일러가 제공되지 않기 때문에 C++로는 컴파일 할 수 없습니다.
: : Delphi64 비트 컴파일러를 사용하면 가능 하기는 한데, RAD 툴에서 제공하는 IMPLIB 는 64비트를 지원하지 않죠.
: : 그러나 IMPLIB 없이도 가능 합니다.
: :
: :
: : 예를 들어... UniDAQ.h 를 보면...
: :
: : EXPORTS WORD  CALLBACK  Ixud_GetDllVersion(DWORD *wDLLVer);       
: :
: : Ixud_GetDllVersion() 함수가 위와 같은 식으로 선언되어 있는데...
: :
: :
: : 파스칼 유닛에서 다음과 같은 식으로 Import 함수를 선언 하세요.
: :
: :
: : function Ixud_GetDllVersion(var X: Cardinal): Word; {stdcall}
: :     external 'UniDAQ.dll';
: : 
: : implementation
: : 
: : {$R *.dfm}
: : 
: : procedure TForm2.Button1Click(Sender: TObject);
: : var
: :   dllVersion : Cardinal;
: : begin
: :   Ixud_GetDllVersion(dllVersion);
: : end;
: : 

: :
: : 위와 같은 식으로 VC로 컴파일 되어있는 64비트 DLL을 사용하면 됩니다. 컴파일은 Delphi 64 비트로...
: :
: : 위에서 코멘트 되어있는 stdcall은 의미가 없습니다.  32비트 플렛폼에서는 여러가지 Calling Convention이 사용
: : 되지만,  64비트 CPU 아키텍쳐에서는 가용 레지스터가 대폭 확장 되었기 때문에 Calling Convention을 레지스터를
: : 통한 방식 하나로 통일해서 사용하기로 정했기 때문입니다.
: :
: : UniDAQ.DLL 에서 제공되는 나머지 함수들들 위와 같은 식으로 사용하면 됩니다.

+ -

관련 글 리스트
66452 아.. lib 링크시 자꾸 에러가 나요... 라이브러리 1217 2012/02/29
66459     Re: RAD 툴에서 VC로 만든 64비트 DLL 사용 빌더 1670 2012/02/29
66462         Re:Re: RAD 툴에서 VC로 만든 64비트 DLL 사용 라이브러리 1759 2012/02/29
66463             Re:Re:Re: RAD 툴에서 VC로 만든 64비트 DLL 사용 Lyn 1414 2012/02/29
66466                 Re:제가 잘 못 보여드린건가요??;; 라이브러리 1092 2012/02/29
66464                 Re:Re:Re:Re: RAD 툴에서 VC로 만든 64비트 DLL 사용 라이브러리 1185 2012/02/29
66457     Re:64bit는 어쩔수가 없군요.. ㅠㅠ 다른 질문입니다;; 라이브러리 1173 2012/02/29
66458         Re:Re:64bit는 어쩔수가 없군요.. ㅠㅠ 다른 질문입니다;; Lyn 1107 2012/02/29
66460             Re:Re:Re:64bit는 어쩔수가 없군요.. ㅠㅠ 다른 질문입니다;; 라이브러리 1178 2012/02/29
66454     Re:아.. lib 링크시 자꾸 에러가 나요... 박지훈.임프 1317 2012/02/29
66455         Re:Re:아.. lib 링크시 자꾸 에러가 나요... 라이브러리 1345 2012/02/29
66456             Re:Re:Re:아.. lib 링크시 자꾸 에러가 나요... Lyn 1429 2012/02/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.