이거 하나 에러나는데 엄청난 -_-ㅋ 삽질을 했다. 지금 새벽 4시니깐 ㅡ.ㅡa 분명 저녁먹고나서 계속 IniFile 클래스를 만지작 거렸으니... 8시간동안 붙잡고 있었다는 ㅜㅜ... 지금 부터 그 문제를 - 알아보자. ! /////////////////////////////////////////////////////// // vs2005 MFC 를 이용하였습니다. /////////////////////////////////////////////////////// // CString 를 사용함! CString bitsIndexStr, zeroStr, oneStr; CString headStr; // fscanf() 를 이용하여 CString 의 변수에 값을 넣음 fscanf(stream, "%S", h..
ini 형식의 파일을 읽고 쓰기 편하게 만들어 놓은 API kkk.ini 라는 파일에 아래와 같은 내용이 있을 때에 ----------------------------------------------------------------------------------------- [AAA] a1=안녕하세요 a2=안녕히 계세요 [BBB] b1=어서오세요 b2=GG ----------------------------------------------------------------------------------------- 아래처럼 함수를 호출하면 ----------------------------------------------------------------------------------------- TC..
프로그램 실행중에 사용자가 입력한 옵션 설정이나 프로그램 스스로 만들어낸 정보들을 다음 실행을 위해 저장해두어야 하거나 그것을 가져와 사용할 때 쓰이는 함수이다. BOOL WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName) lpAppName : 정보를 기록할 섹션 이름을 지정한다. 만약 섹션이 존재하지 않으면 해당 섹션을 만든다. 대소문자를 구분하지 않는다. lpKeyName : 정보를 기록할 키 이름을 지정하며 없을 경우 만든다. 특수한 경우로 이 인수가 NULL 이면 섹션 내의 모든 정보를 삭제한다. lpString : 키값을 정의하는 문자열이다. 정수나 실수 등의 값을 ..
1.간단한 구조체를 하나 선언한다. typedef struct _INIDATA { int a; int b; char str[20]; }INIDATA; 2.ini파일에써보자 INIDATAaaa ={0}; aaa.a = 10; aaa.b =20; strncpy(aaa.str,"kkkstr",strlen("kkkstr")); WritePrivateProfileStruct("RegistryViewer","korea",&aaa,sizeof(aaa), "c:\\test.ini" ); //섹션,키,값,값크기,파일이름 (파일에다가 섹션을 만들고 키에 대응되게 구조체의 값을 부여하라) c:\test.ini를 열어보면 다음과 같다. [RegistryViewer] korea=0A000000140000006B6B6B73747..
int sscanf(char *s, const char *format, ...) sscanf는 scanf와 비교했을때 앞에 char *s 부분이 추가된것만 다릅니다. 다른건 완벽하게 똑같이 동작합니다. scanf가 화면에서 사용자로부터 입력받아서 그걸 변수에 저장하는거 아시죠? 그걸 C 내부에서는 어떻게 처리할까요? 사용자가 입력한건 C는 문자열로 인식하고 입력 버퍼에 들어가 있게 될겁니다. 그걸 scanf 함수에서 내부 처리를 거쳐 변수에 저장하게 되죠 sscanf는 사용자에게서 문자열을 입력받는 대신 문자열 변수에서 문자열을 입력받습니다. 앞에 기본형에서 char *s 부분이 문자열을 써주는 부분인데요 이 문자열에 저장된 값을 scanf에서 사용자가 입력한 값이라고 생각하고 처리하는 거죠 main()..
...... 할말이 없다 -_- 자료형변환 왜이리도 짜증이 나는지... CString szValue; double lValue=0.0; // 해결방법 lValue = _wtof(szValue); // Error!! lValue = atof(LPSTR(LPCTSTR(szValue))); // 참고로 _wtoi() 함수는 정수로 변환을 해준다. _wtof() 함수를 쓰니 한번에 해결이 되었다. 이거 -_-; 하나 찾는데 얼마나 오래걸리는지.. 으아 ㅡㅡ++
cannot convert parameter 1 from 'char [40]' to 'LPWSTR' 에러 발생시 해결 방법 VS.Net 2005에서 사용해본 결과 기본적으로 'LPWSTR' 타입을 사용하고 있었으므로.. wchar_t * pExeFile = ...; wchar_t * pModuleFile = ...; swprintf(pExeFile, L"%s", pModuleFile); 이처럼 하는게 좋을 거 같다.. swprintf(pExeFile, L"%s", pModuleFile); 위 부분에서 L을 빼먹으면 또 에러가 나니 조심... char * pExeFile = ...; char * pModuleFile = ...; sprintf(pExeFile, "%s", pModuleFile); or wc..
WINBASEAPI int WINAPI MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cchMultiByte, LPWSTR lpWideCharStr, int cchWideChar); WINBASEAPI int WINAPI WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar); void main() { char * str = "유니코드"; WORD wc..
팩토리 패턴 - 객체를 생성하기 위한 인터페이스를 만듭니다. 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하도록 합니다. 팩토리 메소드를 이용하면 인스턴스를 만드는 일을 서브 클래스로 미룰 수 있습니다. 팩토리 패턴의 핵심정리 ○ 팩토리를 쓰면 객체 생성을 캡슐화할 수 있습니다. ○ 간단한 팩토리는 엄밀하게 말해서 디자인 패턴은 아니지만, 클라이언트와 구성 클래스를 분리 시키기 위한 간단한 기법으로 활용 할 수 있습니다. ○ 팩토리 메소드 패턴에서는 상속을 활용합니다. 객체 생성이 서브클래스에게 위임되죠. 서브클래스에게 위임되죠. 서브클래스에서는 팩토리 메소드를 구현하여 객체를 생산합니다. ○ 추상 팩토리 패턴에서는 객체 구성을 활용합니다. 객체 생성이 팩토리 인터페이스에서 선언한 메소드들에서 ..
싱글턴 패턴 - 클래스 인스턴스가 하나만 만들어지도록 하고, 그 인스턴스에 대한 전역 접근을 제공합니다. 핵심정리 ★ 어떤 클래스에 싱글턴 패턴을 적용하면 애플리케이션에 그 클래스의 인스턴스가 최대 한 개 까지만 있도록 할 수 있습니다. ★ 싱글턴 패턴을 이용하면 유일한 인스턴스를 어디서든지 접근할 수 있도록 할 수 있습니다. ★ 싱글턴 패턴을 구현할 때는 private 생성자와 정적 메소드, 정적 변수를 사용합니다. ★ 다중 스레드를 사용하는 애플리케이션에서는 속도와 자원문제를 파악해보고 적절한 구현법을 사용해야 합니다.( 사실 모든 애플리케이션에서 멀티 스레딩을 쓸 수 있다고 생각해야 합니다.) ★ 클래스 로더가 여러개 있으면 싱글턴이 제대로 작동하지 않고 여러개의 인스턴스가 생길 수 있습니다. 주의..
MFC 클래스간 통신 SDI 형태 1. MainFrame 얻기 - CMainFrame *pFrame = (CmainFrame *) AfxGetMainWnd(); 2. App 포인터 얻기 - CTestApp *pApp = (CtestApp *) AfxGetApp(); 3. Document 포인터 얻기 - CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd(); CTestDoc *pDoc = (CTestDoc *)pFrame->GetActiveDocument(); - CTestDoc *pDoc = ((CMainFrame *)AfxGetMainWnd())->GetActiveDocument(); 4. View 포인터 얻기 - CMainFrame *pFrame = (CMainF..
클래스 맴버함수를 콜백함수로 사용하기 (passing class member function as callback function) --------------------------------------------------- 이 문제는 윈도우즈 API 와 C++ 언어를 같이 사용할 때 부딫히는 문제이다. 콜백함수를 인자로 요구하는 API 에 클래스의 멤버함수를 넘겨 줄 수는 없는 것인가? 여기 그 해결의 가능성을 보여준다. --------------------------------------------------- 항상 고민해 왔던것. 마음속 깊은곳으로 부터, 나를 괴롭히던 문제. DLGPROC 형 파라메터에 클래스의 맴버함수를 넘겨줄수는 없는것인가. DialogBoxParam( hInst, MAKEIN..