본문 바로가기

프로그래밍/C/C++

(14)
c++에서 Delegate(콜백함수) 구현 그동안 c++ 에서 콜백함수를 구현하는걸 상당히 어렵해 해왔었다.객체와 메서드를 주고 typedef 만들고 괄호에 신경쓰고... 암튼 할때마다 형식이 안외어져서 힘들었는데생각외로 간단히 해결이 된다.그냥 java나 c#처럼 사용하면 되는걸 모르고 이 고생을 했다니 ㅜㅜ#ads_1아래는 예제 #include using namespace std; class Animal; class AnimalDelegate{ public: virtual void onSound(Animal* pSender)=0; virtual void onWalk(Animal* pSender)=0; }; class Animal{ private: AnimalDelegate* delegate; public: Animal(){ this->dele..
C++ <=> C# string 데이타 교환 C++ 로 만든 DLL과 C#의 클라이언트가 문자열을 주고 받을때는 int* 형을 쓰면 쉽다 C++ : dll 파일 #include #include extern "C" DLLTYPE int* test(int* str){ static wstring s = CA2CT((char*)str); //unicode 형으로 바꿔준다 s.append(L"--A"); //문자 추가 return (int*)s.c_str(); }#ads_1C# : dll Client public partial class Form1 : Form{[DllImport("AutoPost.dll")] public static extern IntPtr test(char[] str); // c++ 에서 보내온 int* 형을 IntPtr 형으로 받는다 ..
UNICODE 문자열 정리 2005년쯤에 어느분이 쓰신 글(어느글인지 링크를 잊어버림)을 나름 요약해 보았다.Ansistring 과 Uncode 문자열의 개념과 처리방법에 대해 쉽게 이해할 수 있다. #ads_1AnsiString SBCS (Single Byte Character Set) : 오로지 1 byte로 구성된 문자셋. 알파벳과 일부 특수문자만 표현 가능. DBCS (Double Byte Character Set) : 영문은 1byte 한글은 2 byte로 표현하는 확장형 Ansi 문자코드 MBCS (Multi Byte Character Set) : 하나의 글자를 표현할때 여러바이트가 조합될 수 있는 문자세트. 대부분은 2 byte를 사용한다. Unicode 윈도우에서는 UCS-2(16 bit) 를 사용하고 Unix 는 ..
CString, std::string, std::wstring 상호 변환 CString std::string std:wstring 상호변환 확실히 이해하고 암기하자!! #ads_1ANSI UNICODE 변환함수 : A(Ansi), T(Unicode) ANSI => UNICODE : CA2CT( [ANSI 문자열] ) UNICODE => ANSI : CT2CA( [UNICODE 문자열] ) 객체에서 원시 Buffer 구하기 std::string =>str.c_str() CString =>str.operator LPCWSTR()#ads_2 변환 예제 : CString cstr = _T("CString문자열"); std::string str = "string문자열"; std::wstring wstr = L"wstring문자열"; CString cstr2; std::string st..
윈도우즈에서 PThread 를 사용해 보자 PThread는 (Posix Thread) 유닉스계열의 표준 스레드 라이브러리이다.비록 유닉스계열의 라이브러리이지만 win32에서도 사용할 수 있다. #ads_1> 1. http://www.sourceware.org/pthreads-win32/ 사이트에서 Download링크를 눌러 FTP 주소로 들어가자.2. 현재 글쓰는 시점의 최신버전이 prebuilt-dll-1-11-0-release 이기에 이 디렉토리로 들어간다.3. 해당 디렉토리 내의 include와 lib 디렉토리를 다운로드 받는다.4. 다운받은 디렉토리내의 dll 파일들을 c:\windows\System32 디렉토리에 모두 복사한다.5. 비주얼 스튜디오를 연다.6. 프로젝트 -> 속성 -> VC++ 디렉터리를 연다.7. 포함디렉터리에 incl..
기초적인 클래스함수 콜백처리 방법 c++에서 템플릿을 사용하지 않고 일반적으로 콜백을 처리하는 방법입니다.누구나 다 아는 거지만 내가 헤깔려서 기록함 ㅠㅠ #ads_1CCObject 나 CCLog 등의 함수는 cocos2d-x의 객체입니다. class CallClass{ public: typedef void (CCObject::* finHandler)(int); //콜백 클래스함수포인터 타입지정 private:finHandler onFinHandler; //콜백함수 CCObject* finTarget; //콜백대상객체 //콜백 등록용 함수 void setFinHandler(CCObject* target, finHandler handler){ finTarget = target; onFinHandler = handler; } void doP..
간단한 클래스멤버함수 콜백 C++에서 클래스멤버함수포인터를 직접 쓰는 대신 c++11에서 추가된 std::function 으로 간단하게 콜백을 구현할 수 있다.(근데 이게 cygwin에서는 안먹히네요. 다 뜯어고쳤잖아잉~ ㅠㅠ) 굵은색을 주의깊게 살펴보자 #ads_1#include #include using namespace std; class Child{ private: typedef std::function func1; //인수가 없는것 typedef std::function func2; //인수가 있는것 func1 onHandler1; func2 onHandler2; public: void setHandler1(func1 f){ onHandler1 = std::move(f); } void setHandler2(func2 f)..
';'이(가) 'XXX' 식별자 앞에 없습니다. ';'이(가) 'XXX' 식별자 앞에 없습니다. 원인은 사용중인 클래스를 인식할 수 없어서이다아래 세가지를 검토해본다#ads_11. 필요한 헤더파일을 include 했는가?2. 헤더파일의 include 순서가 잘못되지 않았는가?2. 사용중인 클래스의 name space를 선언했는가? #ads_1