목록Code (32)
Data Analysis for Investment & Control
C#에서는 Sytem.IO의 Directory 클래스를 이용해 특정 경로 내의 파일 리스트를 쉽게 얻어 올 수 있다. 하지만, C++에서는 어떻게 얻어올까 구글링을 하다가 dirent.h를 활용하는 방법 등 몇 가지 코드를 찾을 수가 있었는데, 그 중 가장 직관적인 방법을 정리하도록 한다. 함수를 사용하려면 다음을 추가한다. #include #include #include [Header] typedef std::wstring str_t; vector get_files_in_folder(str_t folder, str_t file_type = L "*.*"); [Source] vector get_files_in_folder(str_t folder, str_t file_type) { vector names;..
MFC 프로그래밍을 하다 보면, 특정 다이얼로그를 모듈화 시켜 사용하고 싶어질 때가 있다. 그런데, DLL 내에서 다이얼로그를 DoModel을 이용하여 호출 시, 에러 발생은 안하는데 다이얼로그 창이 아예 뜨지 않는 경우를 겪었다. 이럴 경우에 다음을 확인해 보는 것을 조언한다. 1. 다이얼로그 리소스 이름이 잘 매칭 되어 있는지를 확인한다. -> 해당 다이얼로그의 헤더에 enum { IDD = IDD_DIALOG_NAME } 과 같은 부분에서 IDD_DIALOG_NAME가 리소스 파일에 존재하는지 확인한다. 만약 없다면, 해당 다이얼로그의 리소스 이름과 맞춰준다. 2. DLL 프로젝트 속성에서 일반 > MFC 사용란에 '정적 라이브러리에서 MFC 사용'으로 설정이 되어 있는지 확인한다. -> 만약 다른..
C++/MFC 코딩을 할 때 Visual Studio의 프로젝트 환경은 유니코드로 놓고 사용하는 편이다. 왜냐하면 다국어 지원이 가능하기 때문. 머 그렇다고 다양한 국가의 언어를 사용하는 국제적인 프로그램을 만들었던 것은 아니지만... 가끔 다른 사람들이 만들어 놓은 코드나 dll을 사용해야 할 경우가 있다. 그럴 때 멀티바이트 기반으로 작성해 놓은 것을 내 코드에 적용시키기 위해 일일히 변환시켜 줘야해서 짜증날 때가 많다. 그렇다고 변환이 쉽냐면 그것도 아닌데, 해결 방법을 Googling을 해도 쉽게 찾을 수는 없었다. 그러다가 누군가 그나마 쉽게 할 수 있는 방법을 올려놓은 것을 발견했는데, 꼬박 하루 내내 고민하면서 변수 선언과 이런 저런 함수를 연달아서 사용해도 되지 않아서 참으로 간편하다. 예..
:: Interface를 더 elegant 하게... Native Code인 C++ dll과 C#을 연동시키는데 feasibility를 보는 것에 급급하다 보니, 구현된 코드가 세련되지 못하다. 우선, C++ dll의 LoadLibrary 부분의 기존 코드를 보면, unmanangedLib = LoadLibrary(TEXT( "D:\\Work\\11. P3Suite\\P3Strategist\\Debug\\P3Core.dll")); DLL 경로가 하드 코딩되어 있다!! 이걸 실행 파일이 위치하는 경로에서 읽어 오도록 수정하자. // link unmanaged class wchar_t path[MAX_PATH]; GetCurrentDirectory(MAX_PATH, path); std::wstring str..
많은 삽질을 통해 드디어 C++ C++/CLI C#을 연동하는 코드 테스트에 성공했다. 역시나 머리가 나쁘면 몸이 피곤하다. 썩 마음에 드는 방법은 아니고, 제한적이긴 하지만, known data typed 기반의 interface를 구현하는 것으로 연동이 가능할 듯 하다. 구현 순서는 아래와 같이 한다. 1. C++ dll 구현 : Regular DLL using shared MFC DLL 기반 2. C++/CLI 기반의 Wrapper Class 구현 : 여기서는 명시적 링크 방법을 사용 3. C# 프로젝트에서 C++/CLI dll을 추가시켜 사용 먼저, C++ DLL 구현이다. 1. C++ dll 구현 : Regular DLL using shared MFC DLL 기반 헤더에서 P3Base.h 파일을..
이전에는 MFC 기반의 응용프로그램을 만드는 프로젝트에서 사용했기 때문에 dll 생성을 확장 dll(extension dll)로 만들어 사용했었다. 그런데, C#에서 사용하려고 하니 이 방법으로는 할 수가 없게 되었다. 이의 해결 방법을 알아보던 중, CLI(Common Language Infrastructure)로 wrapping하는 방법이 있다는 걸 알게 되었다. 문제는 내가 확장 DLL만을 사용해봤기 때문에 기본 DLL을 생성해서 다른 프로젝트에 추가하는 방법을 모른다는 것이다. 게다가 C++ DLL을 사용하려는 타겟 프로젝트 환경이 MFC 기반이 아니기 때문에 어떻게 추가를 해줘야 하는지도 모르겠다. 먼저, 테스트를 위해 DLL 프로젝트를 하나 생성한다. DLL 빌드 옵션은 '공유 MFC DLL을..
웹프로그래머가 아니라서 그 동안 웹프로그래밍 개발환경을 어떻게 꾸며야 하는지 잘 몰랐는데, 최근에 eclipse를 이용한 PHP 개발 환경이 잘 되어 있다는 이야기를 듣고 이것 저것 개발환경을 조금식 꾸며가고 있는 중이다. 로봇을 개발할 때도, AVR 같은 간단한 마이컴을 가지고 개발했던 거랑 DSP + Code Composer 조합의 차이를 체감했던 것과 마찬가지로 무엇인가를 개발할 때 개발환경이 얼마나 중요하며 디버깅을 얼마나 빨리 잘하느냐가 개발 속도 및 작품 완성도를 높일 수 있는지는 잘 알고 있다. PHP 개발환경을 꾸미기 위해서 PHP eclipse와 XAMPP를 사용하기로 한다. 아래와 같은 순서로 PHP 개발환경을 설정하는데 필요한 프로그램들을 인스톨한다. 1. Java Runtime En..
결제 관련 테이블 - 컨텐츠 가격 범위 테이블 : _price_range - 회원 레벨 대비 수수료율 테이블 : _commission - 포인트 충전 금액 설정 테이블 : _deposit_setting - 포인트 인출 금액 설정 테이블 : _withdrawal_setting
파일을 다루는 PHP를 작성하는 것은 꽤 직관적입니다. 파일을 업로드하게되면, 웹 서버의 기본 임시 디렉토리에 저장이 됩니다. 스크립트가 끝날 때까지 파일을 옮기거나 이름을 바꿔주지 않으면 파일은 지워지게 됩니다. PHP 스크립트에서 다루는 데이터는 수퍼글로벌 배열인 $_FILES에 저장되어 있습니다. register_globals가 활성화되어 있으면 변수 이름을 통해 바로 정보를 얻을 수 있습니다. 그렇지만 파일 업로드 부분에서는 register_globals를 비활성화 하는 것이 중요하므로 수퍼글로벌 배열을 사용해야 합니다. HTML 폼에서 태그의 이름으로 $_FILES에 각 요소들이 저장되어 있습니다. userfile이란 이름을 가졌었다면 배열은 다음과 같은 내용을 가집니다. ■ $_FILES['u..
serialize는 값의 저장 표현을 생성합니다. 이는 PHP 값을 저장하거나 전달할 때 자료형이나 구조를 잃어버리지 않게 합니다. 일렬화된 문자열을 다시 PHP 변수로 만들려면, unserialize()를 사용합니다. string serialize ( mixed $value ) value : 일렬화할 값. serialize()는 resource 형을 제외한 모든 형을 다룹니다. 자기 자신을 참조하는 배열을 serialize() 할 수도 있습니다. 배열/객체 안의 순환 참조도 일렬화하여 저장됩니다. 그 외의 다른 참조는 읽어버립니다. 객체를 일렬화할 때, 일렬화 전에 _sleep 멤버 함수를 호출합니다. 이로써 일렬화하기 전에 객체를 마지막으로 정리할 수 있습니다. 마찬가지로 unserialize()을 ..