Programming/C Win32 MFC2018. 10. 22. 11:44

c언어에서 uuid 생성하기

$ cat uuid.c

#include <uuid/uuid.h>

#include <stdio.h>


void main()

{

        uuid_t out;

        uuid_generate_random(out);

        printf("%x",out);

}

$ gcc uuid.c -luuid

[링크 : https://linux.die.net/man/3/uuid_generate]

[링크 : https://superuser.com/questions/1175935/how-can-i-fix-uuid-uuid-h-no-such-file-error-in-centos]


 typedef unsigned char uuid_t[16];

[링크 : https://git.busybox.net/busybox/plain/e2fsprogs/uuid/uuid.h?h=1_3_stable]

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

while(-1) 이 될까?  (0) 2019.05.24
c언어용 JSON 라이브러리 목록  (0) 2018.10.23
엔디안 급 멘붕..  (0) 2018.05.29
const char *과 char * const 차이  (0) 2018.01.31
소스 코드 포맷 적용하기  (0) 2018.01.08
Posted by 구차니
Programming/C Win32 MFC2018. 5. 29. 11:39

갑자기 little endian인 x86 시스템에서

어떤식으로 Shift 연산자가 작동하는지 멘붕..


엔디안은 메모리에 저장하는 것이기에..

혹시 레지스터는 빅 엔디안으로 구현되는건가?

근데 수업 시간 기억으로는.. little endian이라 자릿수 늘어나도 처리가 부담없다고

그렇게 배운거 봐서는 adder도 모두 little endian인거 같긴한데..

블랙박스 부분이라 알수가 없네..


아무튼.. C 언어 레벨에서는 논리적으로는 big endian으로 처리하고

변환할 때 반대로 구현해줄줄 알았는데 그것도 아니고..(그냥 right는 SAR SHR로 구현)

도대체 어떻게 처리하는건지 알수가 없다.. ㅠㅠ


[링크 : https://code.i-harness.com/ko/q/5c375b]

[링크 : https://www.joinc.co.kr/w/Site/Network_Programing/Documents/endian]


[링크 : https://msdn.microsoft.com/ko-kr/library/336xbhcz.aspx?f=255&MSPPError=-2147217396]

[링크 : https://blogs.msdn.microsoft.com/.../hello-arm-exploring-undefined-unspecified-and-implementation-defined-behavior-in-c/]


[링크 : https://stackoverflow.com/questions/7184789/does-bit-shift-depend-on-endianness]

[링크 : https://stackoverflow.com/questions/1041554/bitwise-operators-and-endianness/1041573]


[링크 : https://www.ibm.com/developerworks/aix/library/au-endianc/index.html]


1235 page

Description

 Shifts the bits in the first operand (destination operand) to the left or right by the number of bits specified in the second operand (count operand). Bits shifted beyond the destination operand boundary are first shifted into the CF flag, then discarded. At the end of the shift operation, the CF flag contains the last bit shifted out of the destination operand. The destination operand can be a register or a memory location. The count operand can be an immediate value or the CL register. The count is masked to 5 bits (or 6 bits if in 64-bit mode and REX.W is used). The count range is limited to 0 to 31 (or 63 if 64-bit mode and REX.W is used). A special opcode encoding is provided for a count of 1. The shift arithmetic left (SAL) and shift logical left (SHL) instructions perform the same operation; they shift the bits in the destination operand to the left (toward more significant bit locations). For each shift count, the most significant bit of the destination operand is shifted into the CF flag, and the least significant bit is cleared (see Figure 7-7 in the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 1).

 The shift arithmetic right (SAR) and shift logical right (SHR) instructions shift the bits of the destination operand to the right (toward less significant bit locations). For each shift count, the least significant bit of the destination operand is shifted into the CF flag, and the most significant bit is either set or cleared depending on the instruction type. The SHR instruction clears the most significant bit (see Figure 7-8 in the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 1); the SAR instruction sets or clears the most significant bit to correspond to the sign (most significant bit) of the original value in the destination operand. In effect, the SAR instruction fills the empty bit position’s shifted value with the sign of the unshifted value (see Figure 7-9 in the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 1). 

[링크 : https://www.intel.com/.../64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf]



case 4:

packet[4] = (val >> 24) & 0xFF;

0115687B  mov         ebx,ecx  

0115687D  sar         ebx,18h  

01156880  mov         byte ptr [edi+4],bl  

packet[5] = (val >> 16) & 0xFF;

01156883  mov         ebx,ecx  

01156885  sar         ebx,10h  

01156888  mov         byte ptr [edi+5],bl  

packet[6] = (val >> 8) & 0xFF;

0115688B  mov         ebx,ecx  

0115688D  sar         ebx,8  

01156890  mov         byte ptr [edi+6],bl  

packet[7] = (val) & 0xFF;

01156893  mov         byte ptr [edi+7],cl  

break;

01156896  jmp         $LN11+54h (11568A8h)  

break; 

흐음... 어렵다...

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

c언어용 JSON 라이브러리 목록  (0) 2018.10.23
uuid in c  (0) 2018.10.22
const char *과 char * const 차이  (0) 2018.01.31
소스 코드 포맷 적용하기  (0) 2018.01.08
win32 시리얼 통신 LPCTSTR / LPCSTR  (0) 2017.12.07
Posted by 구차니
Programming/C Win32 MFC2018. 1. 31. 12:12

간단하게

const char*는 const char 를 가르키는 포인터 이고

포인터가 가리키는 변수를 다른걸로 바꿀 수 있지만

포인터가 가리키는 변수의 내용은 바꿀 수 없다.


char * const는 char를 가리키는 const 포인터 이고

포인터가 가리키는 변수를 다른걸로 바꿀 수 없지만

포인터가 가리키는 변수의 내용을 바꿀순 있다.


근데.. const 포인터를 어따 써먹지?

링크드 리스트 이런거 구현하거나 범용적으로 쓰이려면 쓸데도 없고

C++의 레퍼런스 처럼 특정 변수를 지정해서 쓰는 용도라면..

커널내에서 정도 밖에 떠오르지 않네?


char * const a;

means that the pointer is constant and immutable but the pointed data is not.

You could use const_cast(in C++) or c-style cast to cast away the constness in this case as data itself is not constant.


const char * a;

means that the pointed data cannot be written to using the pointer a. Using a const_cast(C++) or c-style cast to cast away the constness in this case causes Undefined Behavior. 

[링크 : https://stackoverflow.com/questions/10091825/constant-pointer-vs-pointer-on-a-constant-value4]

[링크 : http://ra2kstar.tistory.com/143]

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

uuid in c  (0) 2018.10.22
엔디안 급 멘붕..  (0) 2018.05.29
소스 코드 포맷 적용하기  (0) 2018.01.08
win32 시리얼 통신 LPCTSTR / LPCSTR  (0) 2017.12.07
MFC CList 선택항목 인덱스 얻기  (0) 2017.11.28
Posted by 구차니
Programming/C Win32 MFC2018. 1. 8. 11:29

eclipse에서 하려니 먼가 잘 안되고

(한줄에 여러개 있는게 되는게 있고 안되는게 있고 그러네..)

jindent 라는 플러그인 하니 라인길이 제한이 걸려있어서 유료 사야하고


notepad++에는

tidy 플러그인 깔아야 한다는데, 플러그인 매니저가 이상해져서 깔기 빡세고


웹에서 하는 것도 있지만

외부로 코드 유출되는거 아닌가 걱정되서 쓰기 그렇고..

그리고 파일단위가 아닌 복/붙해야 하니 귀찮...

[링크 : https://codebeautify.org/c-formatter-beautifier]


리눅스에서 툴을 이용하는것들 발견.. 해봐야 할 듯

[링크 : https://askubuntu.com/questions/448497/source-code-formatter-indenter]


clang-format 쓸만하긴 한데 하위 디렉토리 자동으로 뒤져서 하는건 없다고..

[링크 : https://stackoverflow.com/questions/28896909/how-to-call-clang-format-over-a-cpp-project-folder]

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

엔디안 급 멘붕..  (0) 2018.05.29
const char *과 char * const 차이  (0) 2018.01.31
win32 시리얼 통신 LPCTSTR / LPCSTR  (0) 2017.12.07
MFC CList 선택항목 인덱스 얻기  (0) 2017.11.28
MFC CSdlierCtrl 에서 SetPos()  (0) 2017.11.28
Posted by 구차니
Programming/C Win32 MFC2017. 12. 7. 14:41

아.. 정리를 안해놨던가?


LPCSTR - LP Const STRing

LPCTSTR - LP Const Tchar STRing

LPCWSTR - LP Const Wchar STRing

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


typedef wchar_t WCHAR;    // wc,   16-bit UNICODE character

typedef WCHAR TCHAR, *PTCHAR;


일단.. 시리얼 통신 할때는 대개 1byte로 통신을 하니까

아무생각 없이.. 인터넷상에서 굴러 다니는 MyComm.cpp를 주워서 쓰면

두개가 혼용되어 있어서 데이터가 이상하게 꼬이는 수가 발생한다.

int Receive(LPSTR inbuf, int len);

BOOL Send(LPCTSTR outbuf, int len); 

[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=572404]


아무튼 되도록이면 둘다 LPCSTR로 쓰는게 상책!

Posted by 구차니
Programming/C Win32 MFC2017. 11. 28. 15:52

+

2017.11.29

아래에 껄로 해보니 안되서 다시 검색...

CListBox로 GetDlgItem()으로 받아와서 하니 문제없이 된다.


[링크 : http://www.softwareandfinance.com/Visual_CPP/MFC_CListBox_Multiple_Selection.html]

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

---------

음.. 한번에 뱉어내는 무언가는 없나 보네...


POSITION GetFirstSelectedItemPosition( ) const; 

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


int GetNextSelectedItem(

   POSITION& pos 

) const; 

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


[링크 : http://thebase.tistory.com/entry/리스트-컨트롤-선택항목-해당-인덱스-얻기]



+

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

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

소스 코드 포맷 적용하기  (0) 2018.01.08
win32 시리얼 통신 LPCTSTR / LPCSTR  (0) 2017.12.07
MFC CSdlierCtrl 에서 SetPos()  (0) 2017.11.28
MFC 자식 다이얼로그를 backward로 보내기  (0) 2017.11.28
MFC CListBox  (0) 2017.11.26
Posted by 구차니
Programming/C Win32 MFC2017. 11. 28. 14:08

대개 슬라이드 컨트롤은 0~max 이런식으로 쓰는데

0대신에

-min ~ +max 범위로 하고

SetPos(0)을 하면 설정되지 않는 문제가 있다.(원인은 모르겠네...)


아무튼 해결은 SetTicFreq(1)을 함으로서 이동을 할 수 있게 해주는거라는데

읽기 귀차니즘으로 원인은 일단 패스.. ㅠㅠ


m_slidervertical.SetBuddy(&m_ChartCtrl, FALSE);

m_slidervertical.SetRange(-10, 10);

slidervertical.SetTicFreq( 1 );

m_slidervertical.SetPos(0); 

[링크 : https://www.codeproject.com/Questions/368298/CSliderCtrl-SetPos-not-correct-when-range-is-set]


SetTicFreq 기본값이 1이라는데 도대체 머가 원인인거야 -ㅁ-?

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

Posted by 구차니
Programming/C Win32 MFC2017. 11. 28. 14:01

음.. 적절한 용어가 안떠오르네

always on top의 해제 라고 해야하나?

기본적으로 귀찮으니(...) modal-less로 Create 할때 ID만 넣어 주고 했는데

이 때는 기본값이 부모 위에 생성되도록 된다고 한다.

(자식 다이얼로그 설정에 무엇이든 간에)

reg->Create(IDD_CHL_REG);

reg->ShowWindow(SW_HIDE); 


대신 아래처럼 데스크탑 윈도우를 받아와서 생성에 넣어주면

부모와 자유롭게 순서를 바꿀수가 있게 된다.

다만, 작업 표시줄에서 여러개로 쌓이게 되니 참고.

('윈도우즈'에서 개별 윈도우로 인식을 하는건가? 프로세스는 하나로 뜨긴 한다..)

reg->Create(IDD_CHL_REG, CWnd::GetDesktopWindow()); 

reg->ShowWindow(SW_HIDE);


[링크 : http://shaeod.tistory.com/776]

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633504(v=vs.85).aspx]

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms644996(v=vs.85).aspx#init_box]



+

2017.11.29

어... 이렇게 하니 getParent()로 부모의 핸들을 얻는게 불가능 하다?!?!

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

MFC CList 선택항목 인덱스 얻기  (0) 2017.11.28
MFC CSdlierCtrl 에서 SetPos()  (0) 2017.11.28
MFC CListBox  (0) 2017.11.26
부모 다이얼로그, 자식 다이얼로그 통신하기  (0) 2017.11.25
CCheckListBox  (0) 2017.11.24
Posted by 구차니
Programming/C Win32 MFC2017. 11. 26. 12:28

CCombobox 처럼 그냥 addstring 하면되지만

InsertString을 사용하면 특정 위치에 추가할 수 있어서 편하긴 하다.

다르게 말하면 addString을 하면 순서대로 추가가 되지만

InsertString에서 동일 번호로 계속 주면 역순으로 추가가 되는 개념이 된다.


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

[링크 : https://msdn.microsoft.com/ko-kr/library/80ay18e5.aspx] insertstring

[링크 : https://msdn.microsoft.com/ko-kr/library/2cekde96.aspx] addstring

Posted by 구차니
Programming/C Win32 MFC2017. 11. 25. 11:21

통신이라 하기 애매하려나..


자식 다이얼로그에서 부모 다이얼로그의 함수를 호출하고

그에 대한 응답을 부모 다이얼로그에서 자식 다이얼로그의 컨트롤로 던져주는 건데..


다이얼로그 클래스 컨스트럭터를 보다 보니 신기한 걸 발견

CRegister(CWnd* pParent = NULL);   // 표준 생성자입니다.

CRegister::CRegister(CWnd* pParent /*=NULL*/) : CDialogEx(CRegister::IDD, pParent) { }


오호.. 이걸 이용해서 잘 구워삶으면 되지 않을까 해서 찾은게

HWND WINAPI GetParent(

  _In_ HWND hWnd

); 

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

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633510(v=vs.85).aspx]


일단은.. modal-less로 구성할건데

컨스트럭터 호출때 (this)를 넣으면 자동으로 CDialgEx를 상속받아 pParent에 넣어 주지 않을까! 했는데

정작 실험해보니.. (this)를 해서 컨스트럭터를 통해 넣어 주던

그냥 () 으로 생성을 하던 똑같이 되긴 한다... 이게 머야 -ㅁ-?



아무튼,

Child는 이런식으로 부모 함수를 부르면 되고

#include "parent.h"

((CparentDlg*)GetParent())->parent_fuction();


parent야 어짜피 생성하러면 이미 include 해야 하니

#include "child.h"

reg = new Cchild(this);

if(reg)

{

reg->Create(IDD_CHLREG);

reg->ShowWindow(SW_HIDE);

}

modal-less로 생성하고 필요할때 SW_SHOW로 보여주면 끝

그리고 reg->로 필요한 함수를 미리 만들어서 interface로서 사용하면 끝!

(물론 child 컨트롤 직접 접근해도 되지만 귀찮은데 어느게 더 귀찮을까 -ㅁ-?)


[링크 : http://www.howspace.kr/gbs/bbs/tb.php/gr2_10_data/176]

[링크 : http://blog.daum.net/pince0/8457191]

2017/08/01 - [Programming/C / Win32 / MFC] - MFC 모달리스(modaless) 다이얼로그


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

MFC 자식 다이얼로그를 backward로 보내기  (0) 2017.11.28
MFC CListBox  (0) 2017.11.26
CCheckListBox  (0) 2017.11.24
MFC CMenu 이벤트 핸들러 관련  (0) 2017.11.24
정체 불명의.. 메시지 WM_DEVMODECHANGE  (0) 2017.11.13
Posted by 구차니