'C++ Builder'에 해당되는 글 11건

  1. 2008.07.20 컴퓨터 관련 북마크 정리 - 20080720
  2. 2008.02.10 BCB에서 겪는 사소한 문제 해결 방법.
  3. 2006.09.16 Indy 9사용할 때 winsock2.h/winsock.h 에러 발생할 때
  4. 2006.09.02 Indy 설치(Delphi, BCB 공통)
  5. 2005.11.27 BCB - System Fonts 목록 Combobox에 출력
  6. 2005.11.24 BCB에 설치된 Indy가 이상하게 동작할 때...
  7. 2005.11.23 BCB 6에 Indy 10 설치 하기 관련...
  8. 2005.09.10 BCB 6에 DSPack 2.3.4 설치
  9. 2003.12.14 파일의 버젼 정보 얻기
  10. 2003.11.16 TStingList이용해서 텍스트 파일 파싱하기
  11. 2003.09.15 Child control 관리
2008. 7. 20. 23:09

컴퓨터 관련 북마크 정리 - 20080720

예전 홈페이지에 올렸던 자료 중에서 C++, C, Delphi 관련 사이트 정리...

1. How to Use Umdh.exe to Find Memory Leaks(umdh 사용방법)
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q268343&%20Q268343

2. C++ Builder Developer's Journal
http://bcbjournal.org/

3. DirectShow community
프리첼에 있던 다이렉트쇼 커뮤니티를 옮긴 홈페이지
http://www.dshowtech.com

4. 문자열 변환(ASCII,UNICODE)
http://www.flipcode.com/tutorials/tut_strings01.shtml

5. Portable Executable File Format(PE Format)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndebug/html/msdn_peeringpe.asp
http://family.sogang.ac.kr/~gundal79/pe_icezlion.htm

6. Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

7. COM Hook
http://codeguru.com/activex/ComHook.html

8. API Hooking
http://codeguru.earthweb.com/system/apihook.html
http://www.codeproject.com/system/HookSys.asp

9. Crack 강좌
http://family.sogang.ac.kr/~gundal79/

10. webring
http://www.temporaldoorway.com/programming/cbuilder/index.htm

11. 빵폴더처럼 폴더 꾸미기
desktop.ini 이용해서 폴더 아이콘 변경
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/custom.asp

12. member function을 WndProc CALLBACK함수로 사용하기
http://bdn.borland.com/article/0,1410,22225,00.html

13. Borland Newsgroup
http://info.borland.com/newsgroups/

14. C++ Builder: The Programmer's Design Journal
http://members.dodo.net.au/~rodolfofrino/_Journal.html


15. Virtual Treeview
http://www.delphi-gems.com/VirtualTreeview/

16. IE & Delphi (EmbedWeb)
http://www.euromind.com/iedelphi/index.htm

17. 언어별 Windows codepages
http://www.microsoft.com/globaldev/reference/cphome.mspx
한글 : http://www.microsoft.com/globaldev/reference/dbcs/949.htm

18. Intraweb Homepage
http://www.atozedsoftware.com/intraweb.html

19. SAPI 관련 프로그래밍
bdn 자료 - 델파이 샘플
Speech Synthesis & Speech Recognition: Overview :
 http://bdn.borland.com/article/0,1410,29580,00.html
Using SAPI 4 High Level Interfaces  :  
 http://bdn.borland.com/article/0,1410,29581,00.html
Speech Synthesis & Speech Recognition: Using SAPI 5.1  
 http://bdn.borland.com/article/0,1410,29583,00.html
Speech Synthesis & Speech Recognition: Using SAPI 4 Low Level Interfaces
 http://bdn.borland.com/article/0,1410,29582,00.html 

20. Active Directory 사용자 만들기
http://www.delphi3000.com/articles/article_1219.asp

21. 델파이 커뮤니티
1.델코
http://www.delphikorea.com
2.델마당
http://www.delmadang.com
3.한델
http://www.delphi.co.kr
4.대구 델파이
http://www.ddel.co.kr
5.나우누리 델파이
http://www.godelphi.com/

22. Delphi Component Site
http://www.delphipages.com
http://www.torry.net
압축 컴포넌트 : http://www.delphipages.com/skunkworks/swcompress.html

'Computer > etc' 카테고리의 다른 글

robocopy를 사용하자.  (0) 2009.08.15
Visual Basic 6.0 - mouse wheeel  (0) 2009.08.06
Firefox 스크롤 조정하기  (0) 2009.03.08
USB 바이러스 예방  (0) 2009.02.14
USB 메모리 초기화  (0) 2009.01.12
컴퓨터 관련 북마크 정리 - 20080720  (0) 2008.07.20
Builder 와 Delphi 컴포넌트 설치 규칙  (0) 2008.07.20
블로그 사이드바에 adsense 붙이기  (0) 2008.02.04
Trackback 0 Comment 0
2008. 2. 10. 16:30

BCB에서 겪는 사소한 문제 해결 방법.

1.빌더 설정에서 사용되는 경로 문제
C++ Builder에서 bpl,lib 등의 경로에 +와 같은 문자가 들어가는 경우에 정상적으로 인식 못함.


2.lib 사이즈 문제
libray too large error : Project->Options->?TLib에서 PageSize항목을 수정한다.


3.델파이 콤퍼넌트 빌더 설치시 발생하는 문제
?TCustomOutline에서 링크에러 나는 경우 bpk 파일을 문서 편집기로 열어서 LIBS과 SPARELIBS 항목에서 bcbsmp.lib를 삭제하고 저장한다.


4.기존 설치된 Indy 상위버젼으로 변경
단순 컴포넌트를 폼에 두고는 컴파일과 실행이 되는데 소스상에서 동적생성시 링크에러 발생 하는 경우에는 library path의 최상위로 indy 관련 경로가 등록이 되어 있는지 확인하고 프로젝트의 include path에도 등록을 한다.

Trackback 0 Comment 0
2006. 9. 16. 00:39

Indy 9사용할 때 winsock2.h/winsock.h 에러 발생할 때

출처 : http://www.elevatesoft.com/bulletin_13.htm

TCPServer사용할 때 아래와 같은 에러가 나면 Conditional defines에 "_WINSOCKAPI_"을 추가하면 해결 된다.

[C++ Error] winsock2.h(109): E2238 Multiple declaration for 'fd_set'
[C++ Error] winsock.h(54): E2344 Earlier declaration of 'fd_set'
[C++ Error] winsock2.h(112): E2146 Need an identifier to declare
[C++ Error] winsock2.h(153): E2238 Multiple declaration for 'timeval'
[C++ Error] winsock.h(97): E2344 Earlier declaration of 'timeval'
[C++ Error] winsock2.h(209): E2238 Multiple declaration for 'hostent'
[C++ Error] winsock.h(153): E2344 Earlier declaration of 'hostent'
[C++ Error] winsock2.h(222): E2238 Multiple declaration for 'netent'
[C++ Error] winsock.h(166): E2344 Earlier declaration of 'netent'
[C++ Error] winsock2.h(229): E2238 Multiple declaration for 'servent'
[C++ Error] winsock.h(173): E2344 Earlier declaration of 'servent'
[C++ Error] winsock2.h(241): E2238 Multiple declaration for 'protoent'
[C++ Error] winsock.h(185): E2344 Earlier declaration of 'protoent'
[C++ Error] winsock2.h(327): E2238 Multiple declaration for 'in_addr'
[C++ Error] winsock.h(269): E2344 Earlier declaration of 'in_addr'
[C++ Error] winsock2.h(385): E2238 Multiple declaration for 'sockaddr_in'
[C++ Error] winsock.h(319): E2344 Earlier declaration of 'sockaddr_in'
[C++ Error] winsock2.h(395): E2238 Multiple declaration for 'WSAData'
[C++ Error] winsock.h(329): E2344 Earlier declaration of 'WSAData'
[C++ Error] winsock2.h(411): E2146 Need an identifier to declare
[C++ Error] winsock2.h(546): E2238 Multiple declaration for 'sockaddr'
[C++ Error] winsock.h(492): E2344 Earlier declaration of 'sockaddr'
[C++ Error] winsock2.h(586): E2238 Multiple declaration for 'sockproto'
[C++ Error] winsock.h(501): E2344 Earlier declaration of 'sockproto'
[C++ Error] winsock2.h(625): E2238 Multiple declaration for 'linger'
[C++ Error] winsock2.h(625): E2228 Too many error or warning messages
Trackback 0 Comment 0
2006. 9. 2. 11:22

Indy 설치(Delphi, BCB 공통)

Indy 설치 및 사용에 관한 포스트로 시간이 날 때마다 업데이트 할 예정이다.

(1). Install Indy For C+ Builder
1. BCB Library & Incude Path 설정
  ㄱ. Tools->Environment Options->Library Path에 아래의 두 경로를 추가한다.
   a . Indy Source 디렉토리
   b. 컴파일된 dcu와 hpp 헤더 디렉토리

  ㄴ. Project->Options->Library Path에는 컴파일된 dcu와 hpp 헤더 경로추가한다.  
  ㄷ. Project->Options->Include Path에는 hpp 헤더 경로를 추가한다.

(2). Indy 관련된 포스트
1.BCB에 설치된 Indy가 이상하게 동작 할때...(http://kr.blog.yahoo.com/guyoun/83.html)

2.C++ Builder 6에 Indy 10 설치 하기(http://kr.blog.yahoo.com/guyoun/82.html)
Trackback 0 Comment 0
2005. 11. 27. 23:37

BCB - System Fonts 목록 Combobox에 출력

설명 : EnumFonts와 EnumFontsProc(Callback function)을 이용한다. FilFontComboBox() 함수를 호출하면 각 Font에 대해서 Callback 함수가 호출이 되고 ComboBox에 추가 된다.

소스 :
TCombobox* FontComboBox;

int __stdcall EnumFontsProc(TLogFont& logfont,TTextMetric& textmetric,
  DWORD fonttype,TComboBox* data)
{
  dynamic_cast<TComboBox *>(data)->Items->Add(logfont.lfFaceName);
  return 1;
}
void __fastcall FillFontComboBox()
{
  HDC dc;
  dc = GetDC(0);
  EnumFonts(dc, NULL, (FONTENUMPROC)EnumFontsProc,(long)FontComboBox);
  ReleaseDC(0, dc);

  FontComboBox->Sorted = true;
}
Trackback 0 Comment 0
2005. 11. 24. 03:01

BCB에 설치된 Indy가 이상하게 동작할 때...

BCB에 새로운 버전의 Indy를 설치할 때는 BCB에 기본으로 포함된 Indy관련 파일을 모두 지우고 설치를 한다.  

Indy 10 설치했다가 안돼서 다시 Indy 9로 바꿨는데...
Indy에 있는 대부분의 컴포넌트는 정상적으로 동작하는데 이상하게 TCPServer를 테스트 하려고 폼에 하나 놓고 Execute이벤트 핸들러 내에서 클라이언트가 입력한 메시지를 읽으려고 하면 AThread->Connection이 NULL이여서 Access Violation이 발생한다.

왜 Connection이 NULL로 넘어오는지 이유는 못 찾고 괜히 Indy 컴포넌트만 지우고 설치하고 만 반복해도 해결이 안되서 혹시나 하는 생각에 빌더 디렉토리에서 indy로 시작되는 파일을 검색해봤더니 빌더에 기본으로 포함된 예전 Indy 파일들이 남아있었다.

빌더 인스톨 할 때 Indy는 선택 안했기때문에 BCB에 포함된 Indy 때문에 이상이 있을거라는 생각은 안했는데 이렇게 많이 남아 있다니 ㅠ.ㅠ. 검색된 파일 이름 뒤에 언더바를 붙이고(or 삭제하고) 새로운 버전의 Indy를 설치하니 모두다 정상적으로 동작한다.

사용자 삽입 이미지















Trackback 0 Comment 0
2005. 11. 23. 21:30

BCB 6에 Indy 10 설치 하기 관련...

Indy 10 설치 하기 결론...
Indy 10 디자인 타임 패키지 까지 등록은 됐으나 실제 사용할 때 IdWinSock2.hpp의 TWSAProtocol_INFOW
 타입의 문제로 사용할 수 없다. BCB에서는 Indy 9.x 버전을 사용하자.

다른 분들은 나처럼 시간 낭비 하지 마시라고 Indy 10 설치 내용과 오류발생 이유를 아래에 적는다.

-------------------------------------------------------------------------------

10.1.11 버전에서는 디렉토리가 system, core, supercore, protocols 로 나뉘어져 있다.
설치 순서는 Systme->Core->Protocols 순서로 하며, 디자인 타임 패키지는 Core, Protocols만 등록하면 된다. SuperCore는 Delphi7에서만 사용함으로 설치하지 않는다.

Indy 10에는 dpk파일만 포함이 되어 있다. 볼랜드 포럼의 자료실에서 dpk2bpk(http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_res&no=287)를 받아서 설치를 시작하기 전에 Core, System. Protocols에 있는 dpk파일을 bpk로 바꿔서 사용을 한다. 이 포스르를 작성할 떄는 Delph 7용 dpk를 바꿔서 사용했다.

패키지를 컴파일 하기 전에 Tools->Environment Options->Library path에 core, protocols, system 디렉토리를 추가한다.  이렇게 추가를 해도 패키지 컴파일 할 때 유닛을  못 찾아서 컴파일 에러가 나는 경우가 있었는데 각 패키지의 옵션에 있는 Libray Path에 다시 core, protocols, systme 디렉토리를 추가하면 된다.

Core 디자인 타임 패키지 등록 할 때 IdCoreDsnRegister 유닛에서 DesignIntf 유닛을 못 찾아서 컴파일 에러가 나는데 이때는 패키지의 옵션에 있는 Library Path에 {$CBB}\source\toolsapi 를 추가해주면 컴파일이 된다.

 <에러나는 부분>
    {$IFDEF VCL6ORABOVE}
      DesignIntf,
      DesignEditors;
    {$ELSE}


# 인디 의 설치 순서에 관한내용으로 인디 사이트에서 가져왔다. (전체 내용은 http://docs.projectindy.org/online/frames.html?frmname=topic&frmfile=index.html

에서 볼수 있다.)

Delphi and C++ Builder Installation
Installing Indy.Sockets in a Borland IDE involves using the run-time and design-time packages files to compile the source code in the library. After compiling the packages and source code, design-time packages are installed in the IDE to make the components available on the component palette.

For Delphi and C++ Builder, the run-time package files should be opened and compiled in the following order:

  • IndySystem (in LibSystem)
  • IndyCore (in LibCore)
  • IndyProtocols (in LibProtocols)
  • IndySuperCore (in LibSuperCore) (for Delphi 7 onl��y)

For Delphi and C++ Builder, the design-time package files should be opened, compiled, and installed in the following order:

  • dclIndyCore (in LibCore)
  • dclIndyProtocols (in LibProtocols)
  • dclSuperCore (in LibSuperCore) (for Delphi 7 onl��y)
 

 런타임, 디자인 타임 패키지를 설치 하고 나서 이젠 BCB에서 Indy 10을 사용할 수 있다는 기대감에 기본 프로젝트 만들고 프로젝트 옵션의 Include , Library Path에 설치된 Indy 관련 디렉토리(system, core, protocols)를 추가했다. 그리고 IdTCPServer 하나 놓고 컴파일을 했더니 아래와 같은 에러가 ㅠ.ㅠ

[C++ Error] IdWinSock2.hpp(373): E2257 , expected
typedef  TWSAProtocol_INFOW *LPWSAProtocol_InfoW;

[C++ Error] IdWinSock2.hpp(746): E2303 Type name expected
typedef int __stdcall (*TWSAEnumProtocolsAProc)(System::PInteger lpiProtocols, PWSAProtocol_InfoA lpProtocolBuffer, unsigned &lpdwBufferLength);

[C++ Error] IdWinSock2.hpp(748): E2303 Type name expected
typedef int __stdcall (*TWSAEnumProtocolsWProc)(System::PInteger lpiProtocols, PWSAProtocol_InfoW lpProtocolBuffer, unsigned &lpdwBufferLength);

[C++ Error] IdWinSock2.hpp(750): E2303 Type name expected
typedef int __stdcall (*TWSAEnumProtocolsProc)(System::PInteger lpiProtocols, PWSAProtocol_InfoA lpProtocolBuffer, unsigned &lpdwBufferLength);

[C++ Error] IdWinSock2.hpp(764): E2303 Type name expected
typedef int __stdcall (*TWSADuplicateSocketAProc)(const int s, const unsigned dwProcessId, PWSAProtocol_InfoA lpProtocolInfo);

[C++ Error] IdWinSock2.hpp(766): E2303 Type name expected
typedef int __stdcall (*TWSADuplicateSocketWProc)(const int s, const unsigned dwProcessId, PWSAProtocol_InfoW lpProtocolInfo);

구글을 찾아보니 Indy 10이 BCB에서 호환 되지 않는 이유중 하나가 IdWinSock2.pas 때문이고 아직 해결책은 없다고 한다.

IdWinSock2.hpp와 IdWinSock2.pas를 비교해 보면 IdWinSock2.pas에는 TWSAProtocol_INFOW이 record로 선언되어 있는데 IdWinSock2.hpp에는 struct 선언이 없어서 컴파일 에러가 나는것 같다.

IdWinSock2.hpp에 TWSAProtocol_INFOW 구조체를 추가해서 다시 테스트 해볼 생각도 했는데...그렇게 할 시간이 없어서 당분간 Indy 10 사용하는 것은 포기...

Trackback 0 Comment 0
2005. 9. 10. 12:03

BCB 6에 DSPack 2.3.4 설치

<변경 내역>
1. 2005/09/10 오전 12:03 문서 작성
2. 2006/08/23 오후 5:00 bcb용 dll 설치 추가, delphi 소스 포함된 프로젝트를 위한 환경 설정 추가.
- - - - - - - - - - -
M$의 VC++를 사용하는 개발자들은 DirectX SDK를 M$사이트에서 다운 받아서 그냥 사용을 하면 되지만... 빌더(파워빌더 아님..)나 델파이에서는 바로 사용을 못하고 이것 저것 손을 봐야 한다. 빌더나 델파이로 계속 다이렉트엑스 개발을 한 사람은 이런 환경 설정하는 작업이 별로 어렵지 않겠지만 간혹 사용하는 사람들한테는 그리 간단한 일이 아니다.

델파이는 directX 헤더를 파스칼로 변환한 유닛과 관련된 DLL만으로 환경을 구성하면 되는데 빌더는 directX SDK의 헤더, 파스칼로 변환된 유닛, 유닛에서 생성된 hpp 등을 모두 사용해야 됨으로 환경 설정하다가 문제가 생겨도 뭐가 문제인지 모르는 경우가 많은 것 같다.

DirectShow기능을 손쉽게 사용할 수 있게 해주는 DSPack 컴포넌트는 여러가지 좋은 셈픔을 제공해주며, 프리(free)이다. 이 문서에서는 DSPack 컴포넌트를 설치하고 샘플을 컴파일 하는 과정을 정리하고자 한다.

[여기 부터 설치 과정 시작~~~]

(1). 설치에 필요한 프로그램을 다운 받는다.
1. DirectX 9.0 SDK Update - (February 2005) 을 다운 받는다. 여기에는 DirectShow가 포함이 안되어 있음으로 DirectX 9.0 SDK Update (February 2005) Extras를 다운받아 설치해야 한다.

2. DSPACK234.zip를 다운 받는다.

3. 빌더에서는 VC와 다른 형태의 lib와 dll을 사용함으로 변환된 것을 다운 받거나 직접 변환해야 한다. CBuilder_DX92_libs.zip를 다운 받는게 편하다.

(2). 프로그램 설치
1. DirectX를 설치한다. 다운 받은 dxsdk_feb2005.exe을 실행해서 압축을 푼다. 압축을 푼 디렉토리에 있는 Setup.exe를 실행해 설치한다.

2. DirectShow 사용을 위해서 dxsdk_feb2005_extras.exe 를 실행해서 압축을 풀고 ${DXSDK_Extra}\Extras 디렉토리를 ${DXSDK}\에 복사를 한다.

3. DSPACK234.zip 파일의 압축을 푼다.

4. DSPACK가 설치된 디렉토리는 이 문서에서는 ${DSPACK}로 표시한다.
DirectX가 설치된 디렉토리는 ${DXSDK}로 표시한다.

5. bcb용 DirectX DLL을 System32 디렉토리에 복사한다.

(4). 컴포넌트 설치
1. Library에 ${DSPACK}\src\DSPack와 ${DSPACK}\src\DirectX9를 추가한다.
Tools -> Environment Optoins -> Library 탭의 Library Path에 추가하면 된다.

2. DirectX9_BCB6.bpk 를 컴파일 한다.

3. DSPack_BCB6.bpk를 컴파일 한다.
컴파일 하기 전에 DsUtil.pas의 Unit과 Interface 사이에 {$HPPEMIT '#include "DxDiag.h"'} 추가를 해야 한다. 만약 추가를 하지 않으면 나중에 DsUtil.hpp에 #include "DxDiag.h"를 추가해야 한다.

4. DSPackDesign_BCB6.bpk를 인스톨한다.

5. ${DSPACK}\src\DirectX9와 ${DSPACK}\src\DSPack에 bcb라는 디렉토리를 만들고 DirectX9와 DSPack의 *.hpp, *.inc를 복사한다. <(4).6 관련>
위 처럼 하는 이유는 DSPack을 사용하는 Delphi 소스를 BCB 프로젝트에 포함시켜서 컴파일 하는 경우 Library Path에 DSPack과 DricetX의 dcu를 필요로 한다. 이때, ${DSPACK}\src\DSPack와 ${DSPACK}\src\DirectX9를 추가하면 컴파일 할 때마다 매번 pas를 컴파일하게 되서 컴파일 시간이 오래 걸리고 에러 나는 DSUtil.hpp를 수정을 해서 사용하게 되는데 컴파일 할 때마다 DSUtils.hpp가 수정 전으로 돌아가게 됨으로 따로 복사를 하는 것이다.

6. 모든 열려있는 프로젝트를 닫고 프로젝트 디폴트 옵션을 변경한다.
ㄱ. Project -> Options -> Directories/Conditionals -> Include Path에 다음 처럼 추가를 하며 인클루드 패스 순서는 아래와 같아야 하며 기본 인클루드 경로 보다 위에 있어야 한다.

${DSPACK}\include
${DSPACK}\src\DSPack\BCB
${DSPACK}\src\DirectX9\BCB
${DXSDK}\Include
${DXSDK}\Extras\DirectShow\Include

ㄴ. Library Path에 아래 경로를 기본 라이브러리 패스보다 상위에 있도록 추가한다.

${DSPACK}\lib
${DSPACK}\src\DSPack
${DSPACK}\src\DirectX9

ㄷ. (옵션) runtime package를 rtl, vlc만 놔두고 모두 지워버리고 런타임 패키지를 사용하지 않도록 체크를 해제한다. <(5).4 관련>

(5). 컴포넌트 테스트
1. DSPack 컴포넌트 탭에서 FilterGraph, Filter, VideoWindow 를 선택해서 폼에 놓는다.

2. 각 컴포넌트의 프로퍼티를 연결시켜주고 컴파일을 하면 다음처럼 에러가 난다.
[C++ Error] DSUtil.hpp(498): E2040 Declaration terminated incorrectly
[C++ Error] DSUtil.hpp(499): E2293 ) expected
[C++ Error] DSUtil.hpp(506): E2040 Declaration terminated incorrectly
[C++ Error] DSUtil.hpp(558): E2189 extern variable cannot be initialized
[C++ Error] DSUtil.hpp(558): E2108 Improper use of typedef 'LONG'
[C++ Error] DSUtil.hpp(558): E2188 Expression syntax
[C++ Error] DSUtil.hpp(558): E2293 ) expected
[C++ Error] DSUtil.hpp(560): E2189 extern variable cannot be initialized
[C++ Error] DSUtil.hpp(560): E2238 Multiple declaration for 'ULONGLONG'
[C++ Error] DSUtil.hpp(454): E2344 Earlier declaration of 'ULONGLONG'
[C++ Error] DSUtil.hpp(560): E2356 Type mismatch in redeclaration of 'ULONGLONG'
[C++ Error] DSUtil.hpp(454): E2344 Earlier declaration of 'ULONGLONG'
[C++ Error] DSUtil.hpp(560): E2188 Expression syntax
[C++ Error] DSUtil.hpp(560): E2293 ) expected

3. 에러나는 부분을 주석 처리한다. 아래에 나온 항목이 아닌데 에러나는 경우에도 주석 처리를 한다.
498행 : //static const Shortint DXDIAG_DX9_SDK_VERSION = 0x6f;
499행 : //static const HRESULT DXDIAG_E_INSUFFICIENT_BUFFER = 0x8007007a;
506행 : //static const __int64 NANOSECONDS = 0x3b9aca00;
558행 : //extern PACKAGE __int64 __fastcall Int32x32To64(int a, int b);
560행 : //extern PACKAGE __int64 __fastcall UInt32x32To64(unsigned a, unsigned b);
454행 : //typedef __int64 ULONGLONG;

4. 다시 빌드하고 실행한다.

5. 기타 에러 참고
ㄱ. 항목 (4). 설치에서 런타임 패키지 사용 안함으로 설정을 한 경우에는 함수를 찾을 수 없다고 링크에러가 발생한다. 그럴 경우에는 프로젝트에 ${DSPACK}\lib에 있는 d3d9.lib, quartz.lib, wmvcore.lib 를 추가하면 된다. 런타임 패키지 사용을 해제 하지 않은 경우에는 런타임 패키지 창에 DirectX9_BCB6;DSPack_BCB6를 추가한다.

ㄴ. TCustomOutline 관련한 링크 에러가 발생하는 경우에는 bpr파일을 문서 편집기로 열어서 bcbsmp.lib 항목을 삭제한 후에 다시 빌드 한다.

(6). 기타
처음에 DirectX를 August 2005 버전으로 받았는데 여기에는 DirectShow가 포함이 안되어 있어서 PlatformSDK Window 2003 SP1을 받아서 DirectShow, WIndows Core를 설치해서 사용을 하려고 했는데 문제점가 발생했다.

PlatformSDK에서 Windows Core를 설치하면 WIN32 API관련된 winnt.h, winuser.h 등의 기본 헤더 파일도 새로 설치되는데 DirectShow 사용을 위해 빌더 기본 include 경로보다 상위에 두면 새로 설치된 winnt.h, winuser.h 등의 헤더 파일 때문에 컴파일 에러가 발생한다. (M$에서 빌더도 생각을 하고 배포를 했으면 좋을텐데 그렇지 않으니....) 그렇다고 빌더 기본 경로보다 아래에 두면 갱신되어야 할 strmif.h, ksmedia.h 등이 빌더에 설치되어 있는 옛날 것을 인클루드해서 컴파일 하기 애문에 DirectShow 관련된 부분 컴파일에서 에러가 난다. 이렇게도 할 수 없고 저렇게도 할 수 없어서 DirectX SDK 다른 버전을 찾다가 DirectX Extra(February 2005)를 받아서 보니 DirectShow 관련된 헤더만 제공을 함으로 PlatformSDK에 있는 DirectShow를 설치할 때 갱신되지 않아도 될 헤더 파일까지 새로운 것을 사용해야 되는 문제를 피할 수 있다.

Delphi에는 다른건 신경 쓸 필요 없이 런타임 패키지 2개 컴파일 하고 디자인 패키지는 인스톨 하고 라이브러리 패스에 ${DSPACK}\src\DSPack, ${DSPACK}\src\directx 만 추가해주고 개발하면 된다.

[여기서 설치 과정 끝]

그저께는 두 시간 정도 헤매고 어제와 오늘은 새벽 4시까지 잠 못자고 설치하고 삭제하고 하는 작업을 반복했는데 막상 정리를 해보니 크게 복잡한 것은 없다.

빌더에서 DSPACK(DiretShow,DirectX)를 처음 사용하는 분들은 저처럼 해매지 않기 바랍니다.

Trackback 0 Comment 0
2003. 12. 14. 13:30

파일의 버젼 정보 얻기

About 다이얼로그 만드는 방법
1. GetFileVersionInfoSize 이용해서 버젼 정보 크기 얻는다.

2. 버젼 정보를 저장할 메모리를 할당한 후에 버젼 정보를 얻는다.
   MemHandle = GlobalAlloc(GMEM_MOVEABLE, VerSize);
   MemPtr = GlobalLock(MemHandle);
   GetFileVersionInfo(Path.c_str(), VerInfo, VerSize, MemPtr);

3. VerQueryValue(MemPtr, "\VarFileInfo\Translation", &BufferPtr,&BufferLength); 함수를 이용해서 각 정보를 얻는다.

-실제 소스-
코드:
    struct TransArray
    {
       WORD LanguageID, CharacterSet;
    };

    DWORD VerInfo, VerSize;  
    HANDLE MemHandle;
    LPVOID MemPtr, BufferPtr;
    UINT BufferLength;
    TransArray *Array;
    char QueryBlock[40];

    // Get the product name and version from the
    // applications version information.
    String Path(Application->ExeName); //프로그램 패스 얻어오기
    VerSize = GetFileVersionInfoSize(Path.c_str(), &VerInfo);//버젼 정보 크기 얻어오기
    if (VerSize > 0) {
        MemHandle = GlobalAlloc(GMEM_MOVEABLE, VerSize);
        MemPtr = GlobalLock(MemHandle);
        GetFileVersionInfo(Path.c_str(), VerInfo, VerSize, MemPtr);
        VerQueryValue(MemPtr, "\VarFileInfo\Translation", &BufferPtr,
                      &BufferLength);
        Array = (TransArray *)BufferPtr;

        // Get the product name.
        wsprintf(QueryBlock, "\StringFileInfo\%04x%04x\ProductName",
                 Array[0].LanguageID, Array[0].CharacterSet);
        VerQueryValue(MemPtr, QueryBlock, &BufferPtr, &BufferLength);
        // Set the product name caption.
        ProductName->Caption = (char *)BufferPtr;

        // Get the product version.
        wsprintf(QueryBlock, "\StringFileInfo\%04x%04x\ProductVersion",
                 Array[0].LanguageID, Array[0].CharacterSet);
        VerQueryValue(MemPtr, QueryBlock, &BufferPtr, &BufferLength);
        // Set the version caption.
        Version->Caption = (char *)BufferPtr;

        GlobalUnlock(MemHandle);
        GlobalFree(MemHandle);
    } else {
        ProductName->Caption = "";
        Version->Caption = "";
    }

    Comments->Caption = "Thank you for trying this fabulous product.n"
                        "We hope that you have enjoyed using it.";

'Computer > C++' 카테고리의 다른 글

BCB 6에 Indy 10 설치 하기 관련...  (0) 2005.11.23
BCB - StrToHex 함수  (0) 2005.11.06
BCB 6에 DSPack 2.3.4 설치  (0) 2005.09.10
카일릭스 설치 및 일반적인 문제점  (0) 2005.07.10
void pointer 샘플  (0) 2005.07.10
파일의 버젼 정보 얻기  (0) 2003.12.14
TStingList이용해서 텍스트 파일 파싱하기  (0) 2003.11.16
Effective C++ Second Edition  (0) 2003.10.13
Child control 관리  (0) 2003.09.15
C++ 사이트 모음  (0) 2003.04.08
C와 C++의 name mangling  (0) 2003.03.04
Trackback 0 Comment 0
2003. 11. 16. 00:10

TStingList이용해서 텍스트 파일 파싱하기

1. 개념 : TStringList의 Delimiter / DelimitedText를 이용

2. 소스
  TStringList* list;

  try
  {
    list = new TStringList;
    list->LoadFromFile("test1.mfc");//파일 이름

    int lines = list->Count;
    Memo1->Lines->Add("lines:"+String(lines));

    for(int i=0; i<lines; i++)
    {
      TStringList *temp = new TStringList;
      temp->Delimiter = 't';
      temp->DelimitedText = list->Strings[i];

      for(int j=0; j < temp->Count; j++)
      {
        //Memo1->Lines->Add(String(i)+","+String(j)+" : "+temp->Strings[j]);
      }
      delete temp;
    }

  }
  __finally
  {
    delete list;
  }
Trackback 0 Comment 0
2003. 9. 15. 10:59

Child control 관리

개념 : Form과 같은 parent control에는 ControlCount, Controls 프로퍼티가 있으며 이것을 이용해서 child control을 관리 할 수 있다.

controls : parent가 Form인 것들의 리스트
components : owner가 Form인 것들의 리스트

ClassName, ClassNameIs 함수를 이용하면 오브젝트의 타입 스트링을 얻을 수 있음.

소스 :
1. Controls 사용

  //form 에 있는 control 개수 구하기
  int max = StrToInt(Form1->ControlCount);

  //control 개수 만큼 루프 돌면서 각 컨트롤의 tag 값 비교 및 초기화
  for (int i=0;i<max;i++)
  {
    TControl *ChildControl = Form1->Controls[i];
    int tag = ChildControl->Tag;
    if(tag == 1)
    {
      (dynamic_cast<TLabel*>(ChildControl))->Caption = "a";
    }
    else
    {
      (dynamic_cast<TLabel*>(ChildControl))->Caption = "b";
    }
  }

2. Component 사용
  int max = Form1->ComponentCount;
  TComponent *ChildComponent;

  for (int i=0; i<max ; i++)
  {
    ChildComponent = Form1->Components[i];
    String ClassName = String(ChildComponent->ClassName());
  }
Trackback 0 Comment 0