2017年1月15日 星期日

string to hex/int to hex

[BCB] string to hex(int)
int iHex = StrToInt("$" + AnsiString);

[VC++] int to hex(string)
String sHex = iNum.ToString("X2");

2017年1月11日 星期三

[C++] char array 與字串比對

strcmp()

Example.
strcmp(char array, "word")
return 0, means equal, otherwise is not match.

notice: 若 char array 資料來自某段複製
記得自行加上 '\0' 結尾, 否則不會 match

2017年1月10日 星期二

[C++] System::String^ to char*

System::String^ to char*


Reference: http://forums.codeguru.com/showthread.php?372298-MC-amp-C-CLI-String-How-to-convert-System-String-to-char*

Example Code.
using namespace System::Runtime::InteropServices;

char* cFileName = (char*)(void*)Marshal::StringToHGlobalAnsi(textBox1->Text);

[C++] wchar(tchar) 與 char 互轉

wchar(tchar) 與 char 互轉

1. char --> wchar(tchar)
char* szWord = "Hello";
wchar_t szWchar[10];
mbstowcsszWchar, szWord, strlen(szWord));

2. wcahr(tchar) --> char
char szWord[10];
wchar_t szWchar[] = L"Hello";
wcstombs(szWord, szWchar, wcslen(szWchar));

2017年1月9日 星期一

[C++] 取得當前路徑

1. .\\ 可以取得當前應用程式的目錄, 但當前的目錄位置不一定等於應用程式的目錄位置, 應用程式的當前目錄可被修改

2. GetCurrentDirectory() 同 .\\

3. GetModuleFileName()
    函数原型
    DWORD GetModuleFileName(
        HMODULE hModule,    // 若要當前目錄, 填 NULL
        LPTSTR lpFilename,      // 得到的文件名
        DWORD nSize                // 可容許的長度
    );

    Example.
    wchar_t szFilePath[256];
    GetModuleFileName(NULL, szFilePath, 256);
    String ^ A = gcnew String(szFilePath);
    int pos = A->LastIndexOf("\\");
    this->openBinFileDialog->InitialDirectory = A->Substring(0, pos);

2017年1月3日 星期二

[C++] 宣告未知大小的陣列

Reference: http://phorum.study-area.org/index.php?topic=48457.0

使用指標

Example.
int *pt;

要使用時再動態配置記憶體
pt = new int[count];

用完後歸還記憶體
delete []pt;



** 計算陣列大小
int array[] = {1, 2, 3};
int result = sizeof(array)/sizeof(int)

[C++] 組態錯誤

使用 sxstrace 來檢查問題. 使用方法如下:

sxstrace trace -logfile:filename
產生追蹤的 log file

sxstrace parse -logfile:filename -outfile:filename
剖析 log file 並產生輸出檔


若是找不到 DebugCRT 等資料, 可至
32bit os: C:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86
64bit os: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86

2017年1月2日 星期一

[C++] Ref Class and Value Class

Reference: https://social.msdn.microsoft.com/Forums/vstudio/en-US/15d4d4c1-9bb0-430d-a48b-d21ea6ee578f/ref-class-vs-value-class?forum=vclanguage

Class 的類別成員預設是私有, Struct 的成員則是公開

Ref class or struct 將創件參考型別. 他們被管理在堆疊(heap) 並且只能參考 (像指標) 那些被儲存的物件並且傳送

Value class or struct 是實質型別. 當你當作參數傳送或者當成成員時, 整個記憶體區塊將被傳送, 所以你應該只在小的資料型別傳送實質型別

你的預設應該總是 ref class, 只有相當小的型別像 指標 或 Color 在 framework, 你應該選擇 value struct.

[C++] sample property

Reference: https://msdn.microsoft.com/zh-tw/library/2f1ec0b1.aspx

using namespace System;

ref class C
{
public:
    property int Size;
};

int main()
{
    C^ c = gcnew C;
    c->Size = 111;
    Console::WriteLine("c->Size = {0}", c->Size);
}