![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
_cvs_patch-2_1_8.zip
59.1KB
![]() 감사히 쓰겠습니다.
안녕하세요.
해당 파일을 다운로드하고 tbx2.2 alpha 버전과 Toolbar2000 2.1.8 버전 다운받고 올려주신 파일로 Toolbar2000에 copy후 패치하고, Toolbar2000 bpk 파일을 로드하여 Compile 하면 아래와 같이 세개의 에러가 발생됩니다. 왜 그런지요? 이렇게 저렇게 해 보고 있지만 잘 안되네요.. T.T [Pascal Error] TB2Dock.pas(496): Property 'ParentBackground' does not exist in base class [Pascal Fatal Error] TB2Dock.pas(591): Could not compile used unit 'C:\Toolbar\tb2k-2.1.8\Source\TB2Hook.pas' [Linker Error] Unresolved external 'DrawCaptionTempW' referenced from C:\TOOLBAR\TB2K-2.1.8\SOURCE\TB2DOCK.OBJ zepirox님,
델파이나 C++빌더 6 버전에서 컴파일하셨군요. 7 이상 버전에서는 생기지 않는 에러입니다. 그 부분은 TBX에서 사용한 'ParentBackground' 속성 때문인데, 이 속성은 델파이7 이상 버전에서만 사용가능하고 6 이하 버전에는 없습니다. 만약 7 이상 버전은 전혀 사용하지 않으신다면 해당 부분(TB2Dock.pas에 두군데 있습니다)을 삭제해버리면 되고, 같이 사용해야 한다면 ParentBackground 속성을 사용하는 부분이 컴파일러 버전을 체크하도록 다음과 같이 앞뒤로 컴파일러 디렉티브를 붙여주면 됩니다. {$IFDEF JR_D7} property ParentBackground default False; {$ENDIF} ... {$IFDEF JR_D7} ParentBackground := False; {$ENDIF} DrawCaptionTempW 함수는 아마도 Win32 API의 undocumented 부분인 것 같군요. 방금 확인해보니 user32.dll에 포함되어 있는데, user32.h 파일에는 없네요.
저는 컴맨드라인에서 dcc32를 이용해서 컴파일하기 때문에 패키지 빌드할 때 에러가 안났는데, 방금 확인해보니 C++빌더6 IDE 안에서는 링크 에러가 나는군요. C++에서는 에러가 날 수밖에 없는 것이, 델파이에서는 dll에서 엑스포트된 포함된 함수를 호출하기 위해서는 그냥 소스에서 적어주면 땡이지만, C++에서는 임포트 라이브러리 lib 파일(혹은 obj)이 반드시 필요합니다. 해결책은 그리 어렵지 않습니다. DrawCaptionTempW를 포함한 임포트 라이브러리, 그러니까 lib 혹은 obj 파일만 있으면 되죠. DrawCaptionTempW.OBJ를 만들어서 첨부파일로 추가로 올렸습니다. 이걸 C++빌더 패키지에 추가로 포함시키고 컴파일하면 잘 빌드될 겁니다. 이 obj 파일을 만드는 방법은 그리 어렵지 않습니다. 1. user32.dll에서 implib.exe로 임포트 라이브러리 user32a.lib 파일을 만들어냅니다. implib user32a.lib c:\winnt\system32\user32.dll 2. 이 user32a.lib은 C++빌더에 기본 포함된 user32.lib파일과 거의 똑같고 우리가 필요한 건 오직 DrawCaptionTempW 함수 부분 뿐이므로, tlib을 이용해서 이 부분을 추출하면 됩니다. tlib user32a.lib *DrawCaptionTempW 관련 글 리스트
|
Copyright © 1999-2015, borlandforum.com. All right reserved. |