본문 바로가기

VisualStudio.C++.C#/코딩팁,함수활용,단편   ( 160 )


cpp 파일의 전역함수, 전역변수 . extern "C" 처리 cpp 파일의 전역함수 . extern "C" 처리 파일 확장자 .cpp 에서 클래스 멤버 외 전역함수 정의하면 C++ 방식 (Name Mangling) 으로 컴파일된다. cpp 내에서만 이함수 사용하는 경우에는 문제없지만 .c 파일에서 이 함수를 호출하려고 하는 경우 대응위하여 항상 extern "C" 로 가드처리한다. // some_file.cppvoid my_c_style_func() //다른 C 파일에서는 호출 불가능함. { }myclass::member_func{ my_c_style_func(); // 클래스 멤버함수 내에서 동일파일내의 전역함수 호출은 가능 }//////////////// extern "C" 로 가드처리하면 // C 파일에서도 호출 가능해짐extern "C" .. 2026. 3. 8.
C/C++ . 구조체 typedef struct , struct 차이점 C++ C++ 에서는 구조체 이름 자체가 독립적인 타입. 내부나 외부 어디서든 struct 없이 my_st만 써도 된다. struct my_st{ int i;};void func(my_st * p_myst); // 가능.//// 구조체 멤버가 자기자신 참조 하는 경우 struct my_st{ int i; my_st* p_my_st; // 가능. }; C C 에서는 구조체 이름앞에 struct 명시필수. strruct 부착 안할려면 typedef struct .. 형식으로 선언한다. struct my_st{ int i;};void func(struct my_st * p_myst); // 항상 struct 임을 명시해야함.////////////////// typedef struct typedef s.. 2026. 3. 8.
winapi . 100나노초 UTC 시각 . GetSystemTimePreciseAsFileTime . GetSystemTimePreciseAsFileTime 로컬 시간 독립성: 로컬 시간대나 일광 절약 시간제(DST)의 영향을 받지 않는 절대적인 UTC 시간 반환. 고정밀: 일반적인 GetSystemTime이 10~15ms 단위로 업데이트되는 것과 달리, 이 함수는 하드웨어 카운터(QPC)와 연동되어 0.1μs(=100나노초) 의 정밀도. 단위: 1601년 1월 1일 UTC 0시부터의 경과 시간을 100나노초 단위로 반환. 마이크로초 단위로 받으려면 나누기 10.지원운영체제 : windows 8 이후 Windows Server 2012 이후 C++ 코드예 #include #include long long GetUtcNowMicroseconds() { FILETIME ft; // 1. 고정밀.. 2026. 1. 22.
C . 실수 일정단위 분할하여 구간 인덱스만들기 . 실수 Z 를 분할 단위 DivStep 으로 분할하여 정수 인덱스 받기. 예 : DivStep 이 0.005 라면 Z 값에 따라 아래와 같이 0 중심으로 대칭적인 인덱스 필요. Z | IdxStep-----------------------------|--------- 0.020 0.015 0.010 0.005 0.000 -0.005 -0.010 -0.015 -0.020 -0.025 0을 중심으로 대칭적인 경우에는, 한 줄 코드로 충분. int IdxStep = (int)(Z / DivStep); 첫 등록 : 2025.11.27최종 수정 : 단축 주소 : ht.. 2025. 11. 27.
유니티 에서 C++ 로 제작된 DLL 활용 방법 . native plug-ins 유니티 에서 제공하는 DLL 활용 방법 설명 페이지  - https://docs.unity3d.com/Manual/Plugins.html Unity - Manual: Plug-insAssembly Definition File Format Import and configure plug-ins Plug-ins In Unity, you normally use scriptsA piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input indocs.unity3d.com  C++ 로 제작된 DLL 류들은  "nati.. 2024. 7. 10.
MFC . CView . CDC TextOutW 문자열 출력. MFC . CView 문자열 출력 CDC* pDC = GetDC(); pDC->TextOutW(100,100,_T("Hello CView")); //인자 x,y. 좌표원점 : CView 의 좌상단 ReleaseDC(pDC); // 필수 해제 처리해야함. /// 혹은 CClientDC 이용해도 됨. CClientDC dc(this); dc.TextOutW(100, 100, _T("Hello CView")); 첫 등록 : 2023.12.03 최종 수정 : 단축 주소 : https://igotit.tistory.com/5040 2023. 12. 3.
CEvent . Lock() . SetEvent() . ResetEvent() CEvent 생성자 CEvent( BOOL bInitiallyOwn = FALSE, BOOL bManualReset = FALSE, LPCTSTR lpszName = NULL, LPSECURITY_ATTRIBUTES lpsaAttribute = NULL); 2번 인자 bManualReset - TRUE : ResetEvent() 호출해야 이벤트가 Reset 상태로 됨. - FALSE : SetEvent() 호출이후 ResetEvent() 호출하지 않아도 자동으로 Reset 상태로 됨. 헤더파일 : afxmt.h 코드예. #include // 무인자로 생성하는 경우, 2번인자 기본 FALSE 적용된다. // SetEvent() 호출하여 대기해제이후 ResetEvent()별도 // 호출하지 않아도 셀프 Re.. 2022. 4. 9.
MFC. CTreeCtrl. Tree Control . 트리 컨트롤 사용법. 개요. VC++ 에서 Tree Control사용법 정리. 기본 활용법. 1. 도구상자에서 Tree Control 을 대화상자에 배치하고 Tree Control 의 속성창에서 ID를 적절한것으로 설정. 2. 클래스 위저드 실행하여 멤버 변수추가. 예: m_TreeNXTask 3. Tree Control 속성의 Has Button과 Has Lines 속성을 모두 True 로 하기. 4. 트리에 아이템 추가하기 위한 트리컨트롤 멤버 함수 InsertItem (, , ,) 호출한다. 상세. - 기본 활용법. 앞의 순서대로 각 단계별 이미지와 함깨 설명한다. 1. 도구상자에서 Tree Control 을 대화상자에 배치하고 Tree Control 의 속성창에서 ID를 적절한것으로 설정. 2. 클래스 위저드 실행하여.. 2022. 4. 4.
MFC. menu, context menu MFC 컨텍스트 메뉴 만들기 1. 리소스에서 메뉴 추가. 예: IDR_MENU_3DCHART 2. 메뉴보이게 하기. - 아래 함수 호출되면 마우스커서가 메뉴의 좌 상단 꼭지점에 배치된 상태로 보인다. int CCyChartView::Show_Menu3dChart() { CMenu menu, *pSubMenu; if (!menu.LoadMenuW(IDR_MENU_3DCHART)) return 0; if (!(pSubMenu = menu.GetSubMenu(0))) return 0; CPoint pos; GetCursorPos(&pos); SetForegroundWindow(); // 메뉴출력 pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN, pos.x, po.. 2022. 4. 4.
win api. Cryptography API : Next Generation. 암호화. 복호화. Cryptography API: Next Generation (CNG) - 이전 windows api 중 Crypto API 로 불렸던 CryptEncrypt, CryptDecrypt ,, (헤더파일 : wincrypt.h ) 들은 폐기되고 Cryptography API 로 대치됨. 이번 버전의 것과 차별성을 강조하려고 Next Generation 이라고 부르고 간략하게 CNG 로 표기. - 헤더파일 : bcrypt.h - dll 파일명 : bcrypt.dll MS 제공 Cryptography API 설명. 암호화 API: 차세대 - Win32 apps CNG는 암호화 키 관리, 암호화 및 데이터 보안, 암호화 및 네트워크 보안에 대한 암호화 보안 소프트웨어를 만드는 데 사용할 수 있는 암호화 API입니.. 2022. 4. 4.
VC++ . _CRT_SECURE_NO_WARNINGS . #pragma warning(disable: 4996) 오류가 아닌데 VC++ 컴파일 오류 나는 상황 VC++ 에서 컴파일 결과 아래 에러 리스트에 이 함수는 안전하지 않다. 다른 함수 사용해라. 이 경고 안나오게 할려면 _CRT_SECURE_NO_WARNINGS 추가하라는 문구 보이는 경우 해결책 통상 scanf 등 과 같은 함수 사용하려 할 때 상기와 같은 오류 보여주며, 대안으로 다른 함수 사용하라고 제시해주는함수를 보면 구질구질 하기 짝이 없는 경우가 많다. 제시해준 함수를 사용해도 되고 아래처럼 코드에 기록해두면 C4996 은 오류로 처리하지 않고 정상적으로 컴파일 가능. #pragma warning(disable: 4996) 첫 등록 : 2022.03.07 최종 수정 : 단축 주소 : https://igotit.tistory.com/3532 2022. 3. 7.
MFC . 응답없음 해결책 . PeekMessage , DispatchMessage 응답없음 MFC 대화상자든 일반 응용프로그램이든 처리량이 많은 것을 루프문에서 실행시 해당 처리가 완료되기 전까지는 사용자 마우스 입력 키보드 입력등이 처리되지 못하고 먹통처럼 보이고 프로그램 타이틀에 응답없음 이라는 표시가 보인다. 해결방법. 처리 루프 안에 PeekMessage 로 메시지 여부 점검하여 처리할것 있다면 UI 관련 처리도 수행하도록 한다. void function_processing() { for(,,,){ Forced_MessageHandler(); // 이것 호출되면 마우스, 키보드 입력등의 처리 수행됨. //처리할것들.이것저것 } } void Forced_MessageHandler() { MSG msg; // GetMessage 는 메시지 수신될때까지 대기 하기 때문에 무한대기에 .. 2022. 3. 5.
C++ . namespace . 네임스페이스 내부에 선언하여 네임스페이스로 분리 식별 가능한것 : 변수, 함수, 클래스등. 네임스페이스로 분리 식별 안되는것 : #define 문. // 네임스페이스 정의. 헤더 파일등. namespace my_namespace { int a_int; void function(){ } namespace my_ns2{ // 네임스페이스 내부에 네임스페이스 추가 가능. int a_int; // 앞의 my_namespace 의 a_int 와 다르게 취급됨. }//namespace my_ns2 } // namespace my_namespace // 활용하는곳. my_namespace::a_int = 100; // 네임스페이스:: 으로 접근 가능. my_namespace::my_ns2::a_int = 200; u.. 2022. 3. 1.
std::string . 검색, 비교 , 추출 , 지우기 . find compare substr erase find, rfind ,front , back #include std::string my_str = "my string is bla bla bla .? ! . . end"; // 반환값. my_str 에서 인자".?" 를 찾아서 . 이 있는 곳의 인덱스 반환. // 인자로 전달한 문자가 my_str 에 없는 경우 std::npos 반환. int idx_find = my_str.find(".?"); // 25 반환됨. // 뒤에서 부터 검색 rfind int idx_find = my_str.rfind(">"); //뒤에서 부터 첫번째 찾은 > 의 인덱스 반환됨. /// rfind, find 모두 검색결과 없는 경우 std::string::npos 반환. if(my_str.find(",,,") == std:.. 2022. 2. 24.
Rapid Json . 체크 함수들 . /// RapidJson 체크 함수들. .HasMember("키이름"); // 키이름의 항목이 있는지 확인. .IsObject(); // object 인지 확인. .IsNull();// nul 인지 확인. .IsString(); // 문자열인지 확인. .IsBool(); // bool 인지 확인. .IsNumber(); // 숫자인지 확인. .IsInt(); // 정수인지 확인. .IsDouble(); // double 인지 확인. 첫 등록 : 2022.02.23 최종 수정 : 단축 주소 : https://igotit.tistory.com/3512 2022. 2. 23.
std::string . 숫자 . stoi, stof, stol,stod, to_string std::string 을 숫자로 stoi, stof, stol , stod : std::string 을 int, float, long, double 로 간단 변환. 주의 : stoi 같은 경우 최대 10자리 정수까지만 변환된다. // C++11 부터. #include std::string my_str_i = "12345"; std::string my_str_i2 = "1234567890123456"; int i = std::stoi(my_str_i); // 정수로. base 지정하지 않으면 최대 10자리까지 정수변환. int64_t = std::stoi(my_str_i2); //주의 : 문자열 앞에서 부터 10개만 숫자로 변환됨. 숫자를 std::string 으로 to_string() #include i.. 2022. 2. 23.
MFC . AfxMessageBox . 문자열 표현 못하는 경우 있음 상황. 아래코드의 마지막 처럼 CString 의 문자열 사이즈 확인하면 48000 이상인데, AfxMessageBox 창에선 아무 문자도 안보이는 증상 . 원인 문자열 길이가 너무 긴 경우 표현 못함. 수량 변경하면서 확인결과 사이즈 40000 까지는 표현가능. 45000 은 표현 못했음. int CCyRestBybit_SPOT::Acquire_Symbol_All(CString cfs_id_market, CCyD_CyFinSymbol::Symbols* p_ccyd_symbol) { std::string url = "https://api.bybit.com/spot/v1/symbols"; std::string result; m_CCyLibCurlOpenSSL.https_get(url, &result); CS.. 2022. 2. 23.
C# . Process . Kill , CloseMainWindow , Close , Exited C# Process Namespace:System.Diagnostics Kill() 대상 프로세스 즉시 중지 시킨다. 하위 프로세스는 중지 안됨. Kill(Boolean) 프로세스를 즉시 중지하고, 선택적으로 자식/하위 프로제스 중지. kill(true); 로 호출하면 프로세스 하위의 모든 프로세스 들도 모두 중지 됨. CloseMainWindow() main wnindow 로 종료하라는 메시지 송신만 하는것. 대상 프로세스가 윈도우를 갖고 있어야 본 함수 사용가능. 메시지 수신한 main window 가 종료 메시지 수신시 종료처리 안해도 되는 선택권 있음. 또한 main window 가 종료전 저장해야할 데이터등이 있다면 저장완료하고 종료해주는 식의 처리 가능. 반면, Kill 은 대상 프로세스가 종.. 2022. 2. 8.


비트코인




            암호화폐/외환/나스닥/골드          
       
현물 |선물 인버스 |선물 USDT , bybit MT5               프랍 트레이딩. MT4,MT5