일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Php공부
- 아두이노
- 아두이노 강좌
- 그누보드
- 쿠파스
- Ajax
- 쿠팡자동포스팅
- ChatGPT
- HTML
- vue.js
- Python
- 아두이노 기초강좌
- 아두이노 초보
- 쿠팡 블로그
- 자바스크립트
- 프로그램
- 자동글쓰기
- 파싱
- 무료일러스트
- cocos2d-x
- flex
- 쿠팡파트너스
- Javascript
- 웹
- 챗지피티
- 파이썬
- PyQT5
- 자동포스팅
- php
- c#
- Today
- Total
목록프로그래밍/C/C++ (14)
플밍
그동안 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++ 로 만든 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 형으로 받는다 ..
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 상호변환 확실히 이해하고 암기하자!! #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는 (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' 식별자 앞에 없습니다. 원인은 사용중인 클래스를 인식할 수 없어서이다아래 세가지를 검토해본다#ads_11. 필요한 헤더파일을 include 했는가?2. 헤더파일의 include 순서가 잘못되지 않았는가?2. 사용중인 클래스의 name space를 선언했는가? #ads_1
포인터와 배열의 개념을 확실히 잡기 위해 아래와 같은 실험을 해보았다.#ads_1#include #include using namespace std; class XY{ public: int nX, nY; }; int main(){ XY xy[10]; XY *ptr; ptr = xy; //1번 ptr->nX = 1; ptr->nY = 2; //2번 (*(ptr+1)).nX = 3; (*(ptr+1)).nY = 4; //3번 ptr[2].nX = 5; ptr[2].nY = 6; //4번 (*(ptr+3)).nX = 7; (*(ptr+3)).nY = 8; cout
함수에서 1차원 배열을 반환할때에는 단순히 해당 포인터를 반환하면 된다그러면 2차원 배열을 반환할때는 어떻게 해야할까?#ads_1얼핏 아래처럼 하면 될 줄 알았다.char** func(void){ static char a[2][10] = {"aaaa", "bbbb"}; return a; }이런 제길 return a; 에서 a가 반환값 형식과 맞지 않는다고 빨간지렁이들이 글자밑에 꾸물꾸물 나타났다 -_-;; 그럼 도대체 어떻게 해야 하는가???정답은 배열포인터를 사용하면된다.배열의 주소를 가진 포인터!!typedef char (*Temp)[10];Temp func(){ static char a[][10] = {"aaaa", "bbbb"}; return a; }char (*Temp)[10]참 해괴한 문법이긴..