Embarcadero Docwiki 안에 있는 유용한 자료들 모음

Docwiki를 사용하다가 분야별로 C++ Builder로 프로그래밍을 하기에 좋은 자료를 모아서 소개합니다.


Docwiki의 경우, 방대한 자료와 친절한 설명으로 MS의 MSDN이 부럽지 않을 정도로 좋은 내용이 많습니다. 다만 평소 자주 활용하면서도, 일종의 도움말 처럼 문제 해결시에는 좋지만 처음부터 프로그래밍을 차근차근 접근해 들어가려고 할 때 활용하기는 좋은 곳이 아니라는 편견을 가지고 있었습니다. 


그러다가 우연히 링크를 타고 이러저리 이동하다가 의외로 전체 자료가 잘 묶여져 있는 진입점을 찾게 되었는데, 이런 자료들은 평소 시간이 있을 때 정독하면 상당히 유용하리라 생각합니다. 아래에 몇 가지 제가 찾은 진입점들을 정리합니다. 


C++Builder Developer's Guide


예전에 C++ Builder 6.0 시절 있었던 자료와 비슷한 형태의 자료인 듯 합니다. C++ Builder로 개발할 수 있는 방대한 분야의 기술들에 대한 소개를 하고 있습니다. 목록만 보아도 굉장하다는 느낌이 들 겁니다. 게다가 옵션에서 C++ Builder 뿐만 아니라 Dephi도 선택할 수 있는 등, 마치 Docwiki 안에 C++ Builder/Delphi 바이블 책이 한 권 들어있는 느낌이라고 볼 수 있겠습니다.


Developing DataSnap Applications


DataSnap 기술 및 모바일 기기를 위한 응용 방법 등 DataSnap과 관련한 자료를 묶어놓은 자료입니다. DataSnap 기술과 관련하여 JSON, REST 등에 대한 자료도 링크되어 있습니다. 뿐만 아니라 링크 맨 밑에는 예제들만 따로 모아 놓은 곳이 있어 실제 개발에 적용하기에도 상당히 좋게 정리되어 있습니다.


RAD Studio API Documentation


RAD Studio를 설치하면 제공하는 Help와 같은 문서를 Embarcadero Docwiki에서 검색할 수 있게하는 Search 창입니다. 여기를 Docwiki를 탐색하면서 찾아 들어가는 방법은 아직 모르겠는데, 데브기어 관리자분께서 친절하게 알려 주셨습니다. 여기서 컴포넌트나 클래스를 검색해서어 나오는 내용들은 RAD Studio Help와 같은 내용이긴 하지만, Help에 없는 내용들도 같이 검색해 주고, 또 같은 도움말이라도 인터페이스가 좀 더 좋은 것 같아서 상황에 따라서는 유용하게 사용할 수 있을 것 같습니다.  


향후, 더 좋은 정보를 찾게 될 때마다 이 포스팅을 업데이트할 수 있도록 하겠습니다.


참고 자료 1 : Embarcadero Product Documentation Wikis


참고 자료 2 : 데브기어 테크 게시판 


'ETC > Link' 카테고리의 다른 글

Embarcadero Docwiki 안에 있는 유용한 자료들 모음  (0) 2014.07.31

C++ Builder의 문자열에 포맷 지정된 실수 문자열 추가하기

C++에는 sprintf()라는 문자열을 만들어주는 함수가 존재했습니다. 보통의 경우 다음과 같이 여러 문자열을 조합해서 하나의 문자열로 만들어 줍니다. 


 char * myString = sprintf("Float Value Formatted : %f", floatValue);


하지만, C++ Builder에서는 거의 쓸 일이 없었습니다. C++에 있는 String 및 C++ Builder에 있는 AnsiString은 기본적으로 operator+ 연산자를 오버로딩해서 문자열을 편리하게 만들어 주기 때문입니다.(Deployment 설정 추가)


 String myString = "Float Value Formatted : " + IntToStr(floatValue);


하지만 프로그래밍을 하다보면, 문자열에 가끔씩 실수의 포맷('서식'이 나은지 생각)을 지정해 주어야 할 때가 생깁니다. 이럴 경우 기존에 있었던 sprintf의 기능이 아쉬울 때가 있었습니다.


예전의 C++ Builder에서는 Delphi에서 유래했을 것으로 보이는 Format() 함수를 사용해서 문제를 해결했었는데(해당 관련 소스는 추후 입력), 최근에 C++ Builder에서 Format() 함수를 쓸려면 Format() 함수 내부에 ARRAYOFCONST라는 요상한 구조체 비스무리한 것을 만들어서 넣어줘야 합니다. 신기한 것은 이 ARRAYOFCONST는 Delphi에서는 필요없고, 오직 C++ Builder에서만 필요합니다.


문제는 기존의 sprintf()라는 녀석을 다시 쓰고 싶지만, 단순히 첫번째 문장처럼 하면 wchar_t 등등의 에러 메시지만 출력합니다. (에러 메시지도 추후 입력)


다행히, C++ Builder(C++ Builder인지, C++인지는 추후 확인)에서는 String 객체 안에 자체적으로 sprintf() 멤버 함수를 가지고 있습니다. 따라서 다음과 같이 하면 약간 어색하긴해도, 이전부터 친숙하게 사용했던 C++ 문법을 그대로 사용하면서 String에 포맷이 지정된 실수를 문자열로 만들어 넣을 수 있습니다.


 String myString = myString.sprintf(L"Float Value Formatted : %2.5f", floatValue);


참고로 위와 같은 경우 C 스타일 문자열 앞에 대문자 'L'을 넣어줘야 합니다. 이것은 기존 C 스타일 문자열을 Unicode String으로 인식되도록 합니다.


<전체적으로 내용 수정 및 검토 필요 함 - 모든 문자열 앞에 L 테스트>


참고자료 : Mobile Tutorial: Using Location Sensors (iOS and Android) 문서 중 Read Location Information (Latitude, Longitude) from the LocationSensor Component 부분


모바일 앱에서 '사용자 배포 파일'에 접근하기

C++ Builder로 모바일 앱(App)을 만들 때, 누구나 자신만의 그림이나 노래와 같은 '사용자 배포 파일'들을 앱에 따로 추가하고 싶을 것 입니다. 이렇게 따로 사용자만의 파일을 배포하기 위해서는 반드시 모바일 기기의 샌드박스(SandBox) 영역에 배포해야 합니다. 


샌드박스의 위치는 Android는 ".\assets\internal" 라는 폴더이고, iOS는 "StartUp\Documents" 라는 폴더입니다. 폴더 경로의 경우 대소문자도 구별하기 때문에 C++ Builder IDE 메뉴의 Project>Deployment 설정에서 입력할 때 상당히 신경써줘야 합니다. Deployment 설정과 관련한 부분은 나중에 따로 정리할 수 있도록 하겠습니다. (Deployment 설정 추가)


문제는 이렇게 배포한 파일에 접근하기 위해서는 프로그램 내에서 파일이 존재하는 경로를 찾아와야 하는데, C++ Builder에서는 이 방법이 꽤나 난해합니다. 일단 폴더 경로를 구하기 위해서는 GetDocumentsPath()라는 함수를 호출해야 하는데, 이 함수는 System.Ioutils 헤더 파일의 TPath라는 레코드(record)에 존재합니다. 


따라서, 이 함수를 호출하기 위해서는 먼저 System.IOUtils.hpp라는 이름의 헤더 파일을 include하고, 아래와 같이 상당히 긴 문장의 함수명을 입력해야 합니다. 그나마 다행인 것은 헤더 파일을 include하면 코드 인사이트(Code Insight)가 알아서 함수를 찾아주기 때문에 입력 오류는 줄일 수 있습니다. (그래도 길이가 길어서 한눈에 잘 안들어오는 감이 있습니다. ㅜㅜ)


 #include <System.IOUtils.hpp>


 ----


 String fileName = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDcumentsPath(), L"filename");


namespace를 지정하면 그냥 함수만 호출할 수 있을 것 같아서 시도해 봤으나, 그냥 위의 방식으로 하는게 제일 속편합니다. (참고 자료를 보면 Delphi는 좀 더 편하게 호출할 수 있는데, C++ Builder는 왜 그런 식으로 안되는 것일까요?)  


또, 위 문장을 보면 GetDocumentsPath와 함께 Combine 함수도 사용하는데 파일 경로를 구하는 방식이 단순히 String을 더하는 것으로는 동작하지 않기 때문입니다. 실제 모바일 앱을 실행할 때 파일 주소를 확인해보면 약간 암호처럼 숫자로 된 폴더 경로가 나오는데 (추후 경로 결과 추가), 이처럼 단순히 텍스트가 합해지는 형태는 아니기 때문에 String 객체의 operator+ 함수를 사용할 수가 없으므로 Combine이라는 함수를 사용해서 경로와 파일 이름을 취합하게 됩니다. 아무래도, 이 부분은 모바일의 샌드박스 정책과 관련한 부분이라 Embarcadero에서도 어쩔 수 없는 것 같습니다. 


어쨌든 Embarcadero의 공식 문서에서도 계속해서 위와 같은 방법을 사용하고 있는 것으로 보아 당분간은 모바일에서 사용자 배포 파일에 접근하는 방법에는 위 방법보다 더 편한 방법은 없을 듯 합니다. 


참고 자료 : docwiki.embarcadero.com/RADStudio/XE6/en/Creating_an_Android_App 문서 중 Loading and Deploying Files 부분


'FireMonkey' 카테고리의 다른 글

모바일 앱에서 '사용자 배포 파일'에 접근하기  (0) 2014.07.29