본문 바로가기

c

(18)
Dennis MacAlistair Ritchie, C 언어의 창시자의 사망 소식. 전 세계의 수많은 공대생들 중 한명이었다면 보았을 이 문구. 우리 공대의 후예들은 이 언어를 온몸에 배우고, unix 계열의 현재 모든 운영체제를 사용하고 있는것이 현실 입니다. 아이폰과 안드로이드 모두 unix 를 계승한 BSD 와 linux 위에 올려진 OS 임을 감안하고, 이 모든것이 C 언어 위에서 개발이 기반으로 만들어 진다는 것을 감안 한 다면, 이 두가지를 만든 창시자 데니스 맥알리스터 릿치 님의 10월 8일 사망 소식은 오히려 알려지지 않았다는 것이 신기할 따름 입니다. 아마 그 보다 먼저 세상을 떠난 애플의 창시자 (고)잡스 의 운명이 그의 운명보다 좀 더 빨랐기 때문에 그랬을 수 밖에 없었겠지만, 공대생의 후예로서, 한 세대의 마감이라는 말은 정말 온몸으로 와 닿는 것 같습니다. 처음 ..
Cygwin+GCC/G++ 에서 POSIX path 지정 오류 발생. (원인) 우분투에서 개발이 좀 어려운 면이 있어, console application 개발용으로 Cygwin 과 g++ 를 CodeBlocks 10.05 에서 사용 중 이었습니다만, 구 버젼 cygwin 의 gcc 가 3.4.4 인 관계로 wstring 과 wostream, wistream 등에서 문제가 발생 했습니다. 그래서 gcc 4.5.1 을 쓰는 마지막 cygwin version 을 사용 했더니, 여전히 위와 같이 컴파일 하면 아무런 동작을 하지 않습니다. 혹시나 해서 cygwin shell 에서 컴파일을 해 보니, nodosfilewarning 을 지정하라는 말이 나옵니다. 아무래도 DOS 형태의 지정은 POSIX 에 위배 되는 행우 이겠죠. 일단, 이 nodosfilewarning 이란 오류를 안보기 ..
일반 문자열을 바이너리형태의 문자열로 변환 하고 다시 역변환 하기. 일부 프로그램들이 serial key 들을 16진수 값으로 받아서 처리하거나 하는 경우를 보신 분들이 계실 것 입니다. 이런 경우, 사람이 알아 볼수 있는 일반 ASCII 값으로 바이너리(16진수) 를 받아서 다시 원본 데이터로 변환 하는 경우 입니다. 회사 프로젝트에서 필요한 부분이 있어서 급하게 만든 코드인데, 나름 쓸만한 것 같아 공유 합니다. 길이 검사 등은 안 되어 있으므로, 재량껏 개조해서 마음대로 쓰세요 !
socket 의 recv() 는 항상 원하는 크기대로 오지 않는다 ! 이전의 버퍼를 다 받아 오지 않던 문제를 ... 그간 PC 에서 socket processing 하던 편리함에 빠져 그 근본을 잊었던 것 같습니다. 임베디드 보드가 지속적인 메모리의 malloc() 과 free() 때문인지 죽어 버리는 문제가 발생 하지만, 적어도 30MB 의 데이터를 지속적으로 500번 가량 전송 하는데 성공을 했습니다. 이유는 간단히, recv() 함수가 가진 특성을 그간 간과 했기 때문 입니다. socket 에서 recv() 로 원하는 크기가 다 넘어 오지 않는다. 이 사실을 제가 간과 하고 있었네요. 너무나 기초적인 부분인데, 어찌 이런걸 제가 그간 잊고 있었을까요? 그래서 코드를 다음과 같이 수정 하였습니다. int nRecvSize = 0; bool bRecvDone = fal..
MinGW 환경 C++ 에서 Thread 간편히 쓰기 위한 CustomThread 클래스! MinGW 으로 C++ 컴파일 해서 쓸시 , thread 처리를 위해 extern"C" 남발을 했던 기억이 있습니다. 아련한 기억인데 .. C++ 로 class 객체화를 하는데 있어 , thread 의 stdcall 함수 제작은 귀찮음의 걸림돌이 되었다고 생각 됩니다. 그래서 만들었던 것이 바로 이 CustomThread !!! 클래스 원형을 보면 다음과 같습니다. 그리고 실제 사용하는 입장에선 위의 클래스를 상속 받아, Setup 과 Execute(void*) 를 구현해 주면 되는 것 입니다. 예) 예제 소스는 CodeBlocks 로 만들어 졌습니다. 첨부 파일의 소스를 사용할 수 있으니 필요하신 분은 사용해 보시기 바랍니다. 본 소스는 공개로 만든 것 이므로 ,이 코드로 인해 발생하는 문제점은 제가 ..
델파이 에서 C 코드 OBJ 로 함꼐 빌드 하기. 보통 윈도우용 프로그램을 만들때 delphi 보다는 C 로 만드는 것이 더 편리하거나 , C 로 잘 만들어진 라이브러리 등이 있는 경우 이를 delphi 에서 쓰려고 하면 별도로 DLL 을 만들어야 하는 불편함이 있긴 했습니다. 그러다가 BCC32 를 통해서 볼랜드용 COMF 포맷 OBJ 를 만들어서 delphi 내에서 LINK 하여 사용할 수 있다는 것을 이곳을 통해서 알게 되었습니다. 참조한 곳에서 설명은 command line 을 통해서 빌드하는 방법 이었지만, 이는 BCC32 환경을 구축해야 하는 어려움이 있기 때문에 다목적 컴파일러 IDE 인 CodeBlocks 를 통해서 obj 를 생성하여 delphi 에 link 해 보았습니다. 먼저 제가 사용한 방법은 debug 용 obj 를 통해서 del..
[주절거림]원호 그리기 ... 원호를 그리는 것은 부동소수점이 지원되는 플랫폼에서는 어렵지 않은 일 입니다만, 만약 FPU 가 없이 ALU만 있는 CPU 에서 처리 한다는 것은 꽤 어려운 일이 아닐수가 없습니다. 원호를 그리는 것에 있어서 ALU 로 그리게 하는 방법 중 하나는 cos(), sin() 등의 특정 FPU 연산 결과를 이미 index 로 가지고 있는 방법이 있을 수 있겠습니다. 예를 들면 ... static const WORD SIN_10[360] = { 0, 18, 36, 54, 71, 89, 107, 125, 143, 160, 178, 195, 213, 230, 248, 265, 282, 299, 316, 333, ... }; 와 같이 미리 계산된 고정된 수에 대한 integer 값들을 가지고 있는 것이 한 방법 이겠..
[Win32.C] 비트맵으로 폼(윈도우) 깍기. 이전에 Delphi 용으로 소개한 적이 있는 폼(윈도우 또는 다이얼로그 모두)을 깍는 방법을 소개 하고자 합니다. 단, 이방법은 코드상의 길이는 짧으나 속도가 느림을 감안해야 합니다. 이유는 바로 GetPixel() 함수 때문이지요. 개선해야 하는 것은 GetDIBits() 함수를 이용해서 원본으로 사용할 비트맵의 픽셀배열을 가져와서 처리 하는 방법이 가장 빠른 방법이 될 것으로 보입니다. 일단 간단히 소개하자면.. 다음 코드를 참조 해 주시기 바랍니다. HRGN BitmapToRegionEx(HBITMAP aBmpHandle, INT32 width, INT32 height, COLORREF aColor) { INT32x; INT32y; COLORREFaPixel = 0; HRGNtempRGN = NUL..