C++Builder 2007 에서 'TClientSocket' 과 'TIdHTTP' 를 같이 사용하려할 때 발생했다.


'TClientSocket' 은 winsock v1 을 'TIdHTTP' 는 winsock v2 를 사용하여 발생하는 문제다.


인터넷을 열심히 검색해보면 비슷하지만 여러 해결책을 제시한다.


1. 'Conditional Defines' 에 '_WINSOCKAPI_' 추가


2. 다음 코드를 #include <windows.h> 이전에 추가

#ifndef _WINSOCKAPI_

#define _WINSOCKAPI_

#endif


3. 'winsock2.h' 를 'windows.h' 이전에 포함



어떤 방법이든 그대로만 하면 다 해결되지 않고 또 다른 에러에 빠져든다.


그런데 모든 방법은 winsock v1 을 사용하기 전에 winsock v2 를 포함하여 대체하라는 방향을 제시한다.

(winsock2.h 에는 _WINSOCKAPI_ 가 정의되어 winsock v1 의 코드를 배제시키게 되어있다.)


그런데 위의 해결책이 통하지 않는 이유는 어디선가에서 winsock v1 이 먼저 포함되었기 때문이다.


그곳은 'vcl.h' 인 것 같다.


다른 코드 수정없이 모든 cpp 파일에서 #include <vcl.h> 부분을 다음과 같이 'winsock2.h' 를 먼저 포함하게 바꾸니 해결되었다.


#include <winsock2.h>

#include <vcl.h>

#pragma hdrstop


'Windows > 문제해결' 카테고리의 다른 글

[RC Error] Invalid bitmap format  (0) 2009.08.13
[RAD] Process 종료 메세지  (0) 2008.04.03
[INI] 값 저장/참조에 있어 주의점  (0) 2007.06.04
[WIN32] SetWindowLong 이용시 객체 접근  (0) 2007.06.04
[CB] 주석문 \ 에러  (0) 2007.05.25

리소스 파일에 비트맵을 추가하던 도중 발생하였다.

동일한 디자이너가 준 파일임에도 특정 파일은 리소스 포함 시 오류를 발생하였고, 오류가 발생 된 파일의 공통점은 크기(이미지 크기)가 작다는 것 밖에 찾아낸 것이 없다.

이 문제는 간단한 구글링으로 해결되었으며 뉴스그룹 아카이브에 기록 된 내용이었다.

http://newsgroups.archived.at/borland/public.delphi.graphics/200512/051207901.html

포토샵에서 저장 된 비트맵의 경우 비트맵 파일 헤더의 크기 부분이 정확하지 않아 메모리 관리에서 문제가 발생한다는 것이다.

그래서 간단하게 문제의 이미지를 그림판에서 열어 전체 선택하여 복사 후, 새 이미지에 붙여넣기 하여 저장한 이미지를 리소스 이용에 성공하였다.
WM_QUIT 는 종료 메세지이다.
라는 말을 믿고 VCL 에서 윈도우 핸들을 얻어
WM_QUIT 메세지를 보냈는데 종료되지 않는다.

아 이런...
WndProc 메소드를 override 해서
WM_QUIT 시에 PostQuitMessage(Message.WParam) 을 넣어주니 잘 동작하는데...
그렇다면 이 메세지 처리가 안되있다는 말인가.

TApplication.ProcessMessage 에서 WM_QUIT 이 오면
FTerminated := False; 가 되있는데 왜 동작하지 않지...

일단, WM_SYSCOMMAND 메세지를 WParam = SC_CLOSE 로 해서 종료시키기는 했다.

시작시 : 값을 불러온다.
동작
종료시 : 값을 저장한다.

완벽해 보이나 시작시 값을 불러오기 직전 종료가 발생하면 빈 값이 저장된다.
SQL 참조에서도 같은 상황이 발생했다.
주의하자.


'Windows > 문제해결' 카테고리의 다른 글

[RC Error] Invalid bitmap format  (0) 2009.08.13
[RAD] Process 종료 메세지  (0) 2008.04.03
[WIN32] SetWindowLong 이용시 객체 접근  (0) 2007.06.04
[CB] 주석문 \ 에러  (0) 2007.05.25
[C++] 매크로 ##  (0) 2007.05.04
#define RegistMoneyEdit( EDT ) \
    SetWindowLong( EDT->Handle, GWL_STYLE, GetWindowLong( EDT->Handle, GWL_STYLE ) | ES_RIGHT );

TEdit 컨트롤의 텍스트를 우측 정렬하는 코드이다.
RegistMoneyEdit( Edit1 );
으로 사용한다.

이때, 다른 폼의 에디트 컨트롤을 우측 정렬하기 위해
RegistMoneyEdit( Form2->Edit1 );
으로 사용을 하였다.
이때, Access Violation 에러가 났다.

다른 방식으로 접근이 가능 할지 모르겠지만,
일단 시간상 해당 폼에서 처리하였다.

'Windows > 문제해결' 카테고리의 다른 글

[RAD] Process 종료 메세지  (0) 2008.04.03
[INI] 값 저장/참조에 있어 주의점  (0) 2007.06.04
[CB] 주석문 \ 에러  (0) 2007.05.25
[C++] 매크로 ##  (0) 2007.05.04
[SQL] View 의 유용성  (0) 2007.04.27
//    FOCUS_LIST_INDEX( PREFIX##ListView1, -1 ); \
#define FAST_FIND( PREFIX ) \

위와 같은 경우 에러가 난다.
// 뒤는 모두 주석으로 생각을 했는데 에러가 발생했다.
주석문에 \ 가 들어갔다는...

저 문자는 define 에서와 같이 주석문을 여러줄로 하는 것이 아니고 에러만 나므로 피해야한다.

'Windows > 문제해결' 카테고리의 다른 글

[INI] 값 저장/참조에 있어 주의점  (0) 2007.06.04
[WIN32] SetWindowLong 이용시 객체 접근  (0) 2007.06.04
[C++] 매크로 ##  (0) 2007.05.04
[SQL] View 의 유용성  (0) 2007.04.27
[IMG] RAW 이미지 변환  (0) 2007.04.15

매크로 문자열 병합 지시자 ##

문자열 병합에 있어 다른 define 된 문자열을 가리킬 때
그 이름이 잘못된 경우 에러가 명확히 발생하지 않고 다른에러가 난다.

#define VIEW_FITEMIN  "JMFITEMIN"
#define SQL_FTRANS   "CREATE VIEW " ## VIEW_FTRANS ## " AS \
( \
 SELECT I.fExtern, I.fDate, I.fIn, O.fOut FROM " ## TBL_FITEMIN ## \

이부분에서 TBL_FITEMIN 이 없다고 나와야 정확할 텐데
잘못된 함수호출로 에러가 떳다.
조심하자.

'Windows > 문제해결' 카테고리의 다른 글

[INI] 값 저장/참조에 있어 주의점  (0) 2007.06.04
[WIN32] SetWindowLong 이용시 객체 접근  (0) 2007.06.04
[CB] 주석문 \ 에러  (0) 2007.05.25
[SQL] View 의 유용성  (0) 2007.04.27
[IMG] RAW 이미지 변환  (0) 2007.04.15

난 여태 View 를 임시 Table 정도로 사용해왔다.
예를 들면 자주 이용되는 검색에서 식이 좀 복잡하면 View를 만들어 참조하고
새 검색시 새로 만드는... ㅡㅡ;
View 를 사용하지를 못한 바람에 SQL 기술이 상승한 것도 있지만...

오늘 중복 데이터에 대한 처리를 하며 웬만큼 복잡한 SQL 로 해결이 안되는게 있었다.
이전에도 있었지만 프로그램으로 처리를 했었다.
더 나은 쿼리를 알 수 있겠지 하며 무식하게했는데, 없다는 걸 느끼고
오늘은 시간을 단축하고자 View 를 3개정도 사용을 했다.

중복데이터를 뽑아와서 EXISTS 를 이용해 처리를 하고, 삭제를 하려고 했다.
삭제 직접 갑자기 이상한 느낌이 들어 View 를 열어 보았더니
자료들이 없어진 것이다.

오늘의 이 사건으로 View 에 관한 내 기억의 중요한 봉인이 하나 풀린셈이다.
학습은 되었었지만, 실제로 해보지 않아 엄청 강하게 봉인되었던...

앞으로의 SQL 프로그래밍은 좀 편해질 것이다.

여기서 드는 의문점! View 에 대해 INSERT/UPDATE/DELETE 시 어떻게 동작을 할까.
복합적으로 작성된 View 는 안되는걸로 알고있는데, 간단하게 필터링만 해서 보여준 VIew 는?
흠, 복합적인 View 에서 삽입/수정이 안된다는 오류 메세지가 있다는건,
단지 테이블 하나에서 참조한 View 는 삽입 수정이 된다는 뜻일텐데...
그렇다면 엄청편해지겠다 ㅡㅜ

역시 사람은 알고봐야한다.

'Windows > 문제해결' 카테고리의 다른 글

[INI] 값 저장/참조에 있어 주의점  (0) 2007.06.04
[WIN32] SetWindowLong 이용시 객체 접근  (0) 2007.06.04
[CB] 주석문 \ 에러  (0) 2007.05.25
[C++] 매크로 ##  (0) 2007.05.04
[IMG] RAW 이미지 변환  (0) 2007.04.15
RAW 이미지는 파일 확장자에 의해 결정되는 것이 아니라.
원 이미지에 사용된 색상에 의해 결정된다.

확장자를 아무리 .PGM 으로 하고 저장을 해도 결과는 P6 형식이었는데,
그림판에서 256비트로 저장하고 변환을 하니 P5 형식으로 나왔다.

내 사진 스캔을 한 이미지를 변환하였는데,
Borland 의 ImageEditor 의 변환이 더 깔끔했다.

P1 - 2비트 ASCII
P2 - 256비트 ASCII
P3 - 24비트 ASCII
P4 - 2비트 RAW
P5 - 256비트 RAW
P6 - 24비트 RAW

'Windows > 문제해결' 카테고리의 다른 글

[INI] 값 저장/참조에 있어 주의점  (0) 2007.06.04
[WIN32] SetWindowLong 이용시 객체 접근  (0) 2007.06.04
[CB] 주석문 \ 에러  (0) 2007.05.25
[C++] 매크로 ##  (0) 2007.05.04
[SQL] View 의 유용성  (0) 2007.04.27

+ Recent posts