라벨이 Reference인 게시물 표시

[C++] COM 연동 샘플 소스

#import "fileName.tlb" no_namespace rename ("GetUserName","GetUserNameA") void Function() { // 프로젝트 폴더의 소스 파일이 있는 폴더 내 'fileName.tlb' 파일 수정 // 해당 'fileName.tlb' 파일에 맞춰서 'INTERFACE', 'COCLASS' 수정 // IDL 파일에서 interface INTERFACE : IDispatch // IDL 파일에서 coclass COCLASS INTERFACE * interface = NULL; if (interface == NULL) { HRESULT hr; hr = ::CoInitialize(NULL); if (SUCCEEDED(hr)) { hr = ::CoCreateInstance(__uuidof(COCLASS), NULL, CLSCTX_LOCAL_SERVER, __uuidof(INTERFACE), (void**)&interface); if (FAILED(hr)) { MessageBoxA(NULL, "COM 객체 생성 실패", "lpCaption", MB_OK); return; } else { interface->FuncCall(); ::CoUninitialize(); } } } return; }

[C] Command Prompt(명령 프롬프트) 창 띄우지 않고 명령어 실행

#include <iostream> #include <Windows.h> namespace EXEC_COMMAND { namespace RETURN { namespace FAILURE { const int CREATE_PIPE = 1; const int CREATE_PROCESS = 2; } } } int ExecCommand(std::string command, std::string& output); int main() { std::string output; ExecCommand("ping -n 1 142.251.42.164", output); std::cout

[C++] string 자료형 대문자, 소문자 변환

https://github.com/MoongStory/StringTool tolower, toupper 기능 참고.

Integrity Level SID 값

const char * const INTEGRITY_LEVEL_SID_UNTRUSTED = "S-1-16-0"; const char * const INTEGRITY_LEVEL_SID_BELOW_LOW = "S-1-16-2048"; const char * const INTEGRITY_LEVEL_SID_LOW = "S-1-16-4096"; const char * const INTEGRITY_LEVEL_SID_MEDIUM_LOW = "S-1-16-6144"; const char * const INTEGRITY_LEVEL_SID_MEDIUM = "S-1-16-8192"; const char * const INTEGRITY_LEVEL_SID_HIGH = "S-1-16-12288"; const char * const INTEGRITY_LEVEL_SID_SYSTEM = "S-1-16-16384";

[C++] 다양한 형식 간 변환 (형변환)

char *에서 변환 wchar_t에서 변환 * _bstr_t에서 변환 CComBSTR에서 변환 CString에서 변환 basic_string에서 변환 Convert System:: String https://docs.microsoft.com/ko-kr/cpp/text/how-to-convert-between-various-string-types?view=msvc-160 int to string #include <iostream> #include <sstream> int main() { int int_value = 3; std::ostringstream int_to_string; int_to_string string to int, double #include <iostream> #include <sstream> int main() { int int_value = 0; std::stringstream int_string_stream("123"); int_string_stream >> int_value; double double_value = 0.0; std::stringstream double_string_stream("12.3456"); double_string_stream >> double_value; if (!int_string_stream.fail()) { std::cout

[MFC] List Control 컬럼 클릭 시 오름차순 내림차순 번갈아 가면서 정렬

헤더 파일에 typedef struct SORTPARAM { int columnIdx; bool sortDirect; CListCtrl *pList; }SORTPARAM; 구조체와 bool m_bSortDirect; bool 변수 추가 후 List Control의 HDN_ITEMCLICK 핸들러 추가 void CDocumentCheckUpReportDlg::OnHdnItemclickList(NMHDR *pNMHDR, LRESULT *pResult) { LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR); *pResult = 0; SORTPARAM sParam; sParam.pList = (CListCtrl *)GetDlgItem(IDC_LIST); sParam.columnIdx = phdr->iItem; sParam.sortDirect = m_bSortDirect; sParam.pList->SortItemsEx( CompareFunc, (LPARAM)&sParam ); m_bSortDirect = !m_bSortDirect; return; } SortItemsEx 함수 호출 시 호출되는 CallBack 함수 CompareFunc 추가 int CALLBACK CDocumentCheckUpReportDlg::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { CListCtrl *pListCtrl = ((SORTPARAM *)lParamSort)->pList; int columnIdx = ((SORTPARAM *)lParamSort)->columnIdx; bool sortDirect = ((SORTPARAM *)lParamSort)->sortDirect; CString strItem1 = pListCtrl->GetItemText(static_cas...

[Java] JDK 환경 변수 설정

Java 환경변수 설정에 앞서 JDK가 설치되어 있어야 한다. JDK 설치하기 바로가기!!! JDK 설치가 완료 되었으면 환경 변수 설정을 해줘야 한다. Win + PAUSE 키를 눌러서 창이 뜨면 "고급 시스템 설정" 메뉴를 선택한다. 메뉴 선택 시 뜨는 창에서 "환경 변수" 버튼을 클릭한다. 버튼 클릭 시 뜨는 창을 보면 위쪽은 "사용자 변수", 아래쪽은 "시스템 변수" 부분으로 나뉘어 있다. 이 중 "시스템 변수" 부분의 "새로 만들기" 버튼을 누른다. 변수 이름 부분에는 'JAVA_HOME'을 입력하고, 변수 값에는 자바 경로를 입력한 후 확인 버튼을 누른다. (자바 경로는 디폴트로 설치 하였다면 "C:\Program Files\Java\jdk1.8.0_45"(버전은 다르다.)와 같다.) 'JAVA_HOME'이라는 환경 변수가 추가되었으면 이어서 환경 변수 중 'Path'를 선택하고 '편집' 버튼을 누른다. 그럼 기존에 입력되어있는 변수 값이 있을텐데 이 값의 맨 뒤에 ";%JAVA_HOME%\bin"이라고 입력해준다. 이렇게 하면 나중에 JDK를 업데이트하여 폴더에 버전이 바뀌더라도 'JAVA_HOME'에 있는 버전만 수정해주면 Path 부분은 수정하지 않아도 된다. 그리고 이클립스나 넷빈 같은 IDE 개발툴을 사용하면 상관없지만 에디트 플러스나 울트라 에디트로 개발을 한다면, Path 외에 CLASSPATH도 설정해 주어야 하는데 Path 설정은 위와같이 하면 되고 CLASSPATH 설정 방법은 다음과 같다. 마찬가지로 "시스템 변수" 부분의 "새로 만들기" 버튼을 누른다. 변수 이름 부분에는 'CLASSPATH'를 입력하고, 변수 ...

[Java] Java Development Kit(JDK) 설치

이미지
자바 프로그래밍을 하기 위해선 JDK(Java Development Kit) 즉, 자바 개발자 도구가 필요하다. JDK는 오라클 홈페이지에서 무료로 다운이 가능하며 오라클 메인 페이지 주소는 이렇다. https://www.oracle.com/ 오라클 홈페이지에 접속하면 메인 페이지에서 Products -> Software (Java) 메뉴를 선택한다. (홈페이지야 언제든지 바뀔 수 있겠지만 구성은 크게 바뀌지 않을 것이다.) 메뉴 선택 시 보여지는 페이지에서 JDK 설치 파일 다운로드 가능하다. 하지만, 주의할 점이 있다. Important Oracle JDK License Update The Oracle JDK License has changed for releases starting April 16, 2019. The new Oracle Technology Network License Agreement for Oracle Java SE is substantially different from prior Oracle JDK licenses. The new license permits certain uses, such as personal use and development use, at no cost -- but other uses authorized under prior Oracle JDK licenses may no longer be available. Please review the terms carefully before downloading and using this product. An FAQ is available here. Commercial license and support is available with a low cost Java SE Subscription. Oracle also provides the latest OpenJDK release und...

[C#] 접근 불가능한 폴더를 제외한 모든 폴더에서 파일 리스트 얻어오기

private void GetFileList(string strFolder) { int folderIdx = 0; string[] folders; try { folders = Directory.GetDirectories(strFolder, @"*", SearchOption.TopDirectoryOnly); } catch { return; } if (folders.Length != 0) { for (folderIdx = 0; folderIdx < folders.Length; folderIdx++) { GetFileList(folders[folderIdx]); } } DirectoryInfo di = new DirectoryInfo(strFolder); foreach (FileInfo fi in di.GetFiles(@"*.*", SearchOption.TopDirectoryOnly)) { listBox1.Items.Add(fi.FullName); } } 탐색 대상을 C:\로 했을 때 메모리 부족으로 죽는데... listBox1.Items.Add 부분이 문제가 되는건가...?

[Delphi] 델파이 산술 연산문

키워드 설명 예 비고 + 더하기 3 + 2 = 5 - 빼기 3 - 2 = 1 * 곱하기 3 * 2 = 6 div 정수 나누기 3 div 2 = 1 / 실수 나누기 3.0 / 2.0 = 1.5 mod 나누기의 나머지 5 mod 3 = 2 C언어에서 %와 동일

[Delphi] edit에 숫자만 입력하기

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key in ['0'..'9', #25, #08, #13] then else begin Key := #0; ShowMessage('숫자만 입력하세요'); end; end;

[Delphi] 날짜 관련 함수

출처 - http://andyadic.tistory.com/entry/%EB%8D%B8%ED%8C%8C%EC%9D%B4-%EB%82%A0%EC%A7%9C%EC%97%90-%EA%B4%80%EA%B3%84%EB%90%9C-%ED%95%A8%EC%88%98%EB%93%A4 uses DateUtils; // 날짜나 시간을 String으로 function DateToStr(Date: TDateTime): string; function TimeToStr(Time: TDateTime): string; // 스트링을 날짜나 시간으로 function StrToDate(const S: string): TDateTime; - Ex - { var myDate : TDateTime; begin myDate := StrToDate('75-03-15'); ShowMessage('75-03-15  = '+DateTimeToStr(myDate)); myDate := StrToDate('2075-01-01'); ShowMessage('2075-01-01 = '+DateTimeToStr(myDate)); end; } function StrToTime(const S: string): TDateTime; // String과 TDateTime간의 변환 function StrToDateTime(const S: string): TDateTime; function DateTimeToStr(DateTime: TDateTime): string; function Date: TDateTime; function Time: TDateTime; procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word); function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime; function DayOfWeek(Dat...

[Delphi] TWebBrowser 스크롤바 없애기

출처 - http://bloodguy.tistory.com/333 TWebBrowser의 OnDocumentComplete에서 아래 한줄 입력 WebBrowser1.OleObject.Document.Body.Scroll := 'no';

[Delphi] 현재 날짜 구하는 함수

now는 현재의 년 월 일 시간을 리턴해주는 함수이고 FormatDateTime('yyyymmddhhnnsszzz', now) 위의 예처럼 하면 String 형으로 리턴 받을수 있다. 위의 예제처럼 하면 밀리초까지 반환된다. 추가로 now의 반환값은 double 형이다.

[C] C언어의 지시어(헤더파일, 전처리, 매크로)

미리 정의된 매크로 https://docs.microsoft.com/ko-kr/cpp/preprocessor/predefined-macros?view=msvc-160 // 미리 정의된 include 폴더에서 파일을 찾는다. #include <파일이름> // 현재의 소스 코드가 저장되어 있는 폴더에서 먼저 찾고, 파일이 없다면 미리 정의된 include 폴더에서 파일을 찾는다. #include "파일이름" // 컴파일러 오류 메시지를 발생. #error // 파일을 추가한다. #import // Else if #elif // Else #else // 식별자가 정의되어 있지 않으면 참. #ifndef // 식별자가 정의되어 있으면 참. #ifdef // #findef나 #ifdef, #else에 대한 전처리기 부분을 종료 #endif // 내부 행 넘버를 변경한다. #line // 식별자를 정의하지 않는다. #undef // 컴퓨터 또는 운영 체제 관련 컴파일러 기능을 지정 // #pragma once 처럼 뒤에 토큰을 붙여서 쓰며 토큰들은 아래 링크 참조 // https://msdn.microsoft.com/ko-kr/library/d9x1s805.aspx #pragma // 식별자 또는 매개 변수화된 식별자와 토큰 문자열을 연계한 매크로를 생성 #define

[C] 서식 변환 문자열

https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=msvc-170 https://msdn.microsoft.com/ko-kr/library/56e442dc.aspx https://msdn.microsoft.com/ko-kr/library/hf4y5e3w.aspx 출력 형식 설명 %d 10진수 정수형으로 출력합니다. %o (%#o) 8진수 정수형으로 출력합니다. %x (%#x) 16진수 정수형으로 출력합니다. %X 16진수 정수형 대문자로 출력합니다. %p 16진수 정수형으로 출력, 4byte 모두 출력 값이 입력되지 않은 앞 부분은 0으로 채워짐 %u 부호없는 10진수 정수형으로 출력합니다. %c 한 문자를 출력합니다. %s 문자열을 출력합니다. %f 부동소수점으로 12.345와 같이 출력합니다. %e 부동소수점으로 1.2345E12와 같은 형식으로 출력합니다. %E %e와 같되 대문자로 출력 %g %e나 %f 중에서 출력할 자릿수를 덜 차지하는 형태로 출력합니다. %G %g와 같되 대문자로 출력 %i %d와 같음 %% % 출력

[C] 난수 생성

#include <stdio.h> #include <time.h> srand((unsigned int)time(NULL)); // 이 코드는 함수에 한번만 써주면 됨 num = rand() % 100 ; // 0~99의 난수를 생성 num = rand() % 10; // 0~9의 난수를 생성

[C] 시간 지연

// windows.h 헤더 파일 필요. #include <windows.h> // 시간 단위는 ms. Sleep(1000); // Sleep(1000);은 1초 Sleep(10000); // Sleep(10000);은 10초

[C] __int64

#include <stdio.h> int main(int argc, char *argv[], char **env) { __int64 temp; fputs("숫자를 입력해 주세요 : ", stdout); scanf("%I64d", &a); // %I64d 에서 64 앞에 소문자 l(엘)이 아니라 대문자 I(아이) printf("입력한 숫자는 : \n%I64d\n", temp); return 0; } 약 9220000000000000000 (922경)의 숫자까지 인식

[C] 값 입력할 때마다 메모리 할당

#include <cstdio> #include <cstdlib> #include <malloc.h> int *temp, i = 0; void test(int input); int main() { int input = 0; while(1) { printf("입력하세요 : "); scanf("%d", &input); test(input); } return 0; } void test(int input) { i += 1; temp = (int *)realloc(temp, sizeof(int) * i); temp[i - 1] = input; for(int j = 0; j <= i - 1; j++) { printf("res = %d\n", temp[j]); } // 이렇게 할 경우 배열의 경우 배열의 크기가 나오지만 포인터 변수로 // 동적 할당 했을 경우 포인터 변수의 크기가 나옴. printf("sizeof를 사용한 크기 측정 : %d\n", sizeof(temp)); // 동적 할당된 메모리의 크기를 확인하려면 _msize 함수를 사용해야 함... // _msize 함수를 사용하기 위해선 malloc.h를 include 해야 함 printf("_msize를 사용한 크기 측정 : %d\n\n", _msize(temp)); }