導航
1.編譯環境
系統:windows10
環境:VS2010 + Qt5.5.1
2.項目配置
1.設置附加包含目錄
1.此項設置包含的頭文件,需要填入用到的.h文件目錄
2.下圖中的QTDIR是Qt5.5.1安裝目錄環境變量(默認路徑:C:\Qt\Qt5.5.1\5.5\msvc2010)

2.設置附加庫目錄
1.此項設置引用的lib目錄,如下圖。

3.設置附加依賴項
1.此處設置指定的lib文件,一般不用填寫。

3.CLR中各種定義
1.接口定義

2.類定義

3.枚舉定義

4.屬性定義
1.接口中定義:

2.類中定義:

4.CLR中各種使用
1.類的實例化
所有.net對象都需要使用gcnew進行創建,gcnew創建的對象不需要自己手動釋放內存。
GTable ^ ret = gcnew GTable();
2.命名空間的使用
命名空間用於限定類,不同於C#,這里使用::進行分割。
virtual MyNameSpace::ITable ^ GetTable(int index);
5.CLR中數據類型的轉換
1.String ^ 到 QString 的轉換
QString MarshalString(String ^ s)
{
using namespace Runtime::InteropServices;
const char* chars =
(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
string str = chars;
QString ret = str.c_str();
Marshal::FreeHGlobal(IntPtr((void*)chars));
return ret;
}
2.QString 到 String ^ 的轉換
String ^ MarshalStringLocal8(QString os)
{
using namespace Runtime::InteropServices;
if (os.isNull()) return nullptr;
QByteArray data = os.toLocal8Bit();
char * str = new char[data.length() + 1];
strcpy_s(str, data.length() + 1, data.constData());
String ^ ret = Marshal::PtrToStringAnsi(static_cast<IntPtr>(str));
delete str;
return ret;
}
String ^ MarshalString(QString os)
{
using namespace Runtime::InteropServices;
QByteArray data = os.toUtf8();
char * str = new char[data.length() + 1];
strcpy_s(str, data.length() + 1, data.constData());
String ^ ret = Marshal::PtrToStringAnsi(static_cast<IntPtr>(str));
delete str;
return ret;
}
3.char * 到 String ^
String ^ MarshalString(char* os) {
using namespace Runtime::InteropServices;
String ^ ret = Marshal::PtrToStringAnsi(static_cast<IntPtr>(os));
return ret;
}
4.wchar_t * 到 String ^
String ^ MarshalString(wchar_t* os) {
using namespace Runtime::InteropServices;
String ^ ret = Marshal::PtrToStringUni((IntPtr)os);
return ret;
}
5.數組的轉換
using namespace System::Runtime::InteropServices; QByteArray byteArray = obj.toByteArray(); int length = byteArray.count(); array<Byte> ^ rbyteArray = gcnew array<Byte>(length + 2); Marshal::Copy((IntPtr)byteArray.data(), rbyteArray, 0, length); ret = rbyteArray;
