Programming/C Win32 MFC2017. 4. 4. 20:41

음.. CString에서 제공하는 메소드는 아래뿐이네.. GetData() 나 다른것들은 상속에 의해서 다른 클래스에서 온 듯

operator LPCTSTR

GetBuffer() 

[링크 : https://msdn.microsoft.com/en-us/library/aa315043(v=vs.60).aspx]


GetString()은 누구꺼냐.. CObject의 스멜이 나긴 한다만...

(LPCTSTR)로 캐스팅하는 것과 거의 구현이 같은 GetString() 이란 메소드도 있습니다. 

[링크 : https://indidev.net/forum/viewtopic.php?f=5&t=92]


음.. 걍 void* 형으로 캐스팅?

CString str = L"английский"; //Russian Language

DWORD dwWritten=0;

WriteFile(pHandle , (void*) str, str.GetLength()*sizeof(TCHAR),&dwWritten , NULL);

[링크 : https://social.msdn.microsoft.com/.../how-to-send-unicode-characters-to-serial-port?forum=vcgeneral]


LPSTR - Long Pointer STRing

LPCSTR - LP Const STRing

LPTSTR - LP Tchar STRing

LPCTSTR - LPC Tchar STRing

LPWSTR - LP Wchar STRing

LPCWSTR - LP Const Wchar STRing

[링크 : http://pelican7.egloos.com/v/1768951]


char 형식의 좁은 문자 리터럴(예: 'a')

wchar_t 형식의 와이드 문자 리터럴(예: L'a')

char16_t 형식의 와이드 문자 리터럴(예: u'a')

char32_t 형식의 와이드 문자 리터럴(예: U'a') 

[링크 : https://msdn.microsoft.com/ko-kr/library/69ze775t.aspx]


TEXT("")과 _T("")의 차이점은

TEXT("")는 WinNT.h에서 #define했고

_T("")는 tchar.h에서 TEXT가 4글자라서 _T이렇게 2글자로 #define했다. 

[링크 : http://x108zero.blogspot.kr/2013/12/text-t-l.html]



+

tchar.h

#define __T(x)      L ## x

#define _T(x)       __T(x)


음.. L 이야 Long에 대한 prefix literal 이니...까?



'Programming > C Win32 MFC' 카테고리의 다른 글

mfc ccombobox 문자열 받아오기  (0) 2017.04.05
MFC 라디오버튼 사용하기  (0) 2017.04.05
bit field와 컴파일러별 byte align  (0) 2017.03.27
MFC CButton 마우스 클릭시 작동하기  (0) 2017.03.08
GetHttpConnection()  (0) 2017.03.03
Posted by 구차니
Programming/C Win32 MFC2017. 3. 27. 14:54

어라 이거 적은적이 없었나?

대개 비트 구조체라고 했었는데 원래는 비트 필드 인듯

[링크 : https://en.wikipedia.org/wiki/Bit_field]

[링크 : http://lab.cliel.com/entry/C-C-비트필드Bit-Field]


아무튼 얘를 x86에서 쓰려면 대개 아래의 선언문을 통해서 바이트 align을 맞춰야 하는데

컴파일러 별로 사용가능한 선언문이 다르다.

#pragma pack is a Microsoft syntax that has been ported to GCC for compatibility reasons.

__attribute__((aligned)) is a GCC-specific syntax (unsupported by MSVC). 

[링크 : http://stackoverflow.com/.../whats-the-difference-between-pragma-pack-and-attribute-aligned]


'Programming > C Win32 MFC' 카테고리의 다른 글

MFC 라디오버튼 사용하기  (0) 2017.04.05
mfc cstring 문자열 관련(유니코드)  (0) 2017.04.04
MFC CButton 마우스 클릭시 작동하기  (0) 2017.03.08
GetHttpConnection()  (0) 2017.03.03
만능의 tokenizer?!  (0) 2017.03.03
Posted by 구차니
Programming/C Win32 MFC2017. 3. 8. 17:08

MFC에서 버튼은 마우스 릴리즈 시에 이벤트가 발생하는데

버튼을 클릭하는 시점에서 실행하도록 하려면 또 애증의


PreTranslateMessage()를 쓸 수 밖에 없나...


[링크 : http://www.tipssoft.com/bulletin/tb.php/FAQ/648]

[링크 : http://blog.naver.com/1004kiwoo/60128691649]



+

2017.10.17

버튼에서 LBUTTON_DOWN 이벤트 발생시(왼쪽 버튼을 누르는 시점)

행동을 하도록 해보니.. Focus는 누른 이후에 이동하는 거라

버튼에 대해서 포커스로 하기에는 무리..


CButton *pButton;

pButton = (CButton *)GetDlgItem(IDC_BUTTON3);

pButton->GetWindowRect(rect);

if(rect.PtInRect(pMsg->pt))

{

// TODO

}


다만, 키 입력 자체는 이미 클릭하거나 탭키로 포커스를 바꾼 이후에 입력하는 거라 문제가 되지 않을 듯 하다.

if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)

{

if(GetDlgItem(IDC_EDIT1) == GetFocus())

{

// TODO

}


'Programming > C Win32 MFC' 카테고리의 다른 글

mfc cstring 문자열 관련(유니코드)  (0) 2017.04.04
bit field와 컴파일러별 byte align  (0) 2017.03.27
GetHttpConnection()  (0) 2017.03.03
만능의 tokenizer?!  (0) 2017.03.03
mfc md5  (2) 2017.03.03
Posted by 구차니
Programming/C Win32 MFC2017. 3. 3. 18:14

아놔...

대충 검색하고 하다 보니.. username / password가 있는지도 몰랐네

한마디로 하루 작업한거 괜히 뻘짓 되는 저 마법의 두 인자.. -_ㅠ


CHttpConnection* GetHttpConnection(

   LPCTSTR pstrServer,

   INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,

   LPCTSTR pstrUserName = NULL,

   LPCTSTR pstrPassword = NULL 

);


CHttpConnection* GetHttpConnection(

   LPCTSTR pstrServer,

   DWORD dwFlags,

   INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,

   LPCTSTR pstrUserName = NULL,

   LPCTSTR pstrPassword = NULL 

); 


[링크 : https://msdn.microsoft.com/ko-kr/library/59kzsz14(v=vs.71).aspx]




---

수동으로.... 구현 -_ㅠ 아놔..

아무튼 AddRequestHeaders()는 제대로 된 형태가 아니면 삽입이 되지 않고

해당 HTTPConnection은 재사용해도 문제가 되진 않는다.


pHttpFile->SendRequest();

pHttpFile->QueryInfoStatusCode(m_dwStatusCode);

pHttpFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, szHeaders);


switch(m_dwStatusCode)

{

case HTTP_STATUS_OK:

{

CString strResult;

while(pHttpFile->ReadString(strResult))

{

strResult.ReleaseBuffer();

}

}

break;


case HTTP_STATUS_DENIED: // unauthorized

{

CString realm;

CString nonce;

CString cnonce("0000000000");

CString str;


pHttpFile->QueryInfo(HTTP_QUERY_WWW_AUTHENTICATE, szHeaders);

delete pHttpFile;


int curPos = 0;

CString resToken;

CString key;

CString val;


resToken = szHeaders.Tokenize(_T(" "), curPos);

while(!resToken.IsEmpty())

{

// Obtain next token

key = resToken = szHeaders.Tokenize(_T("="), curPos);

val = resToken = szHeaders.Tokenize(_T("\""), curPos);

resToken = szHeaders.Tokenize(_T(" "), curPos);

if(0 == key.Compare(_T("nonce"))) nonce = val;

if(0 == key.Compare(_T("realm"))) realm = val;

}


CString HA1,HA2,RES;

HA1 = md5gen(str = id+":"+realm+":"+pw);

HA2 = md5gen(str = CString("GET:")+query);

RES = md5gen(str = HA1+":"+nonce+":00000001:"+cnonce+":auth:"+HA2);


pHttpFile = pHttpConnect->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);

auth.Append(_T("Authorization: "));

auth.Append(szHeaders);

auth.Append(_T(",username=\""));

auth.Append(id+"\",");

auth.Append(_T("uri=\""));

auth.Append(query+"\",");

auth.Append(_T("cnonce=\""));

auth.Append(cnonce+"\",");

auth.Append(_T("nc=00000001,response=\""));

auth.Append(RES+"\",");

pHttpFile->AddRequestHeaders(auth);

pHttpFile->SendRequest();

pHttpFile->QueryInfoStatusCode(m_dwStatusCode);

pHttpFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, szHeaders);

pHttpFile->Read(content, pHttpFile->GetLength());

}

break;

default:

break;

}


if(pHttpFile) {pHttpFile->Close(); delete pHttpFile; pHttpFile = NULL; }

if(pHttpConnect) {pHttpConnect->Close(); delete pHttpConnect; pHttpConnect = NULL; }

if(pSession) {pSession->Close(); delete pSession; pSession = NULL;


'Programming > C Win32 MFC' 카테고리의 다른 글

bit field와 컴파일러별 byte align  (0) 2017.03.27
MFC CButton 마우스 클릭시 작동하기  (0) 2017.03.08
만능의 tokenizer?!  (0) 2017.03.03
mfc md5  (2) 2017.03.03
ms c++ 관련 신규 문법(?)  (0) 2017.03.03
Posted by 구차니
Programming/C Win32 MFC2017. 3. 3. 12:40

HTTP 파싱하려는데

키와 값을 ,로 분리해서 쓰는녀석이라

고민을 해보는데.. 아무리 생각해도 토크나이저가 짱짱인듯


[링크 : http://codereview.stackexchange.com/questions/107899/converting-a-string-to-a-list-of-key-value-pairs]


[링크 : http://stackoverflow.com/questions/12581169/cstring-tokenization-issue]

'Programming > C Win32 MFC' 카테고리의 다른 글

MFC CButton 마우스 클릭시 작동하기  (0) 2017.03.08
GetHttpConnection()  (0) 2017.03.03
mfc md5  (2) 2017.03.03
ms c++ 관련 신규 문법(?)  (0) 2017.03.03
MFC HTTP POST + 인증  (0) 2017.03.02
Posted by 구차니
Programming/C Win32 MFC2017. 3. 3. 11:50

대부분이 오픈 라이브러리 사용하네..

순수하게 mfc 내부적으로 하는건 영 안보이는 듯..


[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa379908(v=vs.85).aspx] CryptCreateHash 


파일내용을 md5로 만들기

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa382380(v=vs.85).aspx]

[링크 : http://wwwi.tistory.com/90]





+

Cstring의 유니코드, ascii 변환


CStringA (아스키)

CString (유니코드)

[링크 : http://stackoverflow.com/questions/859304/convert-cstring-to-const-char]



대충 수정해서 만든 코드. 예외처리는 전부 빼버렸음

#include <Wincrypt.h>


CString md5gen(CString input)

{

BYTE rgbHash[16];

BYTE *data;

int data_len;

DWORD cbHash;

CString ret;

CStringA str;


HCRYPTPROV hCryptProv;

HCRYPTHASH hHash;


str = input;

data = (BYTE *)str.GetString();

data_len = str.GetLength();


CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0);

CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash);

CryptHashData(hHash,(const BYTE *)data,data_len,0);

CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0);

for (DWORD i = 0; i < cbHash; i++)

ret.AppendFormat(_T("%02x"), rgbHash[i]);


CryptDestroyHash(hHash);

CryptReleaseContext(hCryptProv,0);


return ret;


'Programming > C Win32 MFC' 카테고리의 다른 글

GetHttpConnection()  (0) 2017.03.03
만능의 tokenizer?!  (0) 2017.03.03
ms c++ 관련 신규 문법(?)  (0) 2017.03.03
MFC HTTP POST + 인증  (0) 2017.03.02
MFC HTTP GET/POST  (0) 2017.03.02
Posted by 구차니
Programming/C Win32 MFC2017. 3. 3. 11:29

아직 정확한 위치는 모르겠으나

.net 관련 문법인듯?

gcnew야 new의 새로운 버전인거 같은데

저 망할(?) ^는 도대체 무어란 말인가 -_-


String^ str2 = gcnew String(str.c_str());   

[링크 : https://kldp.org/node/99528]

[링크 : https://msdn.microsoft.com/en-us/library/ms235219.aspx]


The ref new aggregate keyword allocates an instance of a type that is garbage collected when the object becomes inaccessible, and that returns a handle (^) to the allocated object.

[링크 : https://msdn.microsoft.com/en-us/library/te3ecsc8.aspx]

'Programming > C Win32 MFC' 카테고리의 다른 글

만능의 tokenizer?!  (0) 2017.03.03
mfc md5  (2) 2017.03.03
MFC HTTP POST + 인증  (0) 2017.03.02
MFC HTTP GET/POST  (0) 2017.03.02
win32 http 인증 관련  (0) 2017.02.28
Posted by 구차니
Programming/C Win32 MFC2017. 3. 2. 13:03


digest 계산법

[링크 : https://social.msdn.microsoft.com/.../how-to-calculate-digest-auth-in-c?forum=vclanguage]


인증

[링크 : http://stackoverflow.com/.../how-do-i-make-an-http-post-with-http-basic-authentication-using-poco]


+

webrequest 클래스

[링크 : http://gyeongju.tistory.com/entry/SUNAPI-10-사용자인증-digest-인증방법-C]

[링크 : http://stackoverflow.com/questions/1907131/c-interface-version-of-httpwebrequest-and-httpwebresponse]

[링크 : https://msdn.microsoft.com/en-us/library/system.net.webrequest(v=vs.100).aspx]


+

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa385351(v=vs.85).aspx]

'Programming > C Win32 MFC' 카테고리의 다른 글

mfc md5  (2) 2017.03.03
ms c++ 관련 신규 문법(?)  (0) 2017.03.03
MFC HTTP GET/POST  (0) 2017.03.02
win32 http 인증 관련  (0) 2017.02.28
MFC / stdlib / qsort example  (0) 2016.12.19
Posted by 구차니
Programming/C Win32 MFC2017. 3. 2. 12:58



[링크 : http://blog.naver.com/asiank/130105719167]

[링크 : http://blog.naver.com/chodadoo/220597496748]


[링크 : https://msdn.microsoft.com/ko-kr/library/cttkhz64.aspx] CInternetSession 

[링크 : https://msdn.microsoft.com/en-us/library/0z6f3y99.aspx] CHttpConnection

[링크 : https://msdn.microsoft.com/en-us/library/0tw8chfe.aspx] CHttpFile


+


#include <afxinet.h> 


[링크 : https://social.msdn.microsoft.com/.../how-do-i-include-cinternetsession?forum=vcgeneral]


+

[링크 : https://www.codeproject.com/Articles/3253/Beginners-Intro-to-HTTP-calls]

'Programming > C Win32 MFC' 카테고리의 다른 글

ms c++ 관련 신규 문법(?)  (0) 2017.03.03
MFC HTTP POST + 인증  (0) 2017.03.02
win32 http 인증 관련  (0) 2017.02.28
MFC / stdlib / qsort example  (0) 2016.12.19
MFC UpdateData()  (0) 2016.12.16
Posted by 구차니
Programming/C Win32 MFC2017. 2. 28. 14:46


[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa383630(v=vs.85).aspx] winInet

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa384081(v=vs.85).aspx] winHTTP


Authentication in WinHTTP

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa383144(v=vs.85).aspx]


Handling Authentication

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa384220(v=vs.85).aspx]



+

2017.03.02

[링크 : https://npteam.net/80]

[링크 : https://msdn.microsoft.com/ko-kr/library/cttkhz64.aspx] CInternetSession

'Programming > C Win32 MFC' 카테고리의 다른 글

MFC HTTP POST + 인증  (0) 2017.03.02
MFC HTTP GET/POST  (0) 2017.03.02
MFC / stdlib / qsort example  (0) 2016.12.19
MFC UpdateData()  (0) 2016.12.16
윈도우에서 dll 동적 라이브러리 사용하기  (0) 2016.04.04
Posted by 구차니