1.編譯環境windows
2.項目配置
數組
1.設置附加包含目錄spa
2.設置附加庫目錄.net
1.接口定義blog
2.類定義接口
3.枚舉定義內存
4.屬性定義string
系統:windows10
環境:VS2010 + Qt5.5.1
1.此項設置包含的頭文件,須要填入用到的.h文件目錄
2.下圖中的QTDIR是Qt5.5.1安裝目錄環境變量(默認路徑:C:\Qt\Qt5.5.1\5.5\msvc2010)
1.此項設置引用的lib目錄,以下圖。
1.此處設置指定的lib文件,通常不用填寫。
全部.net對象都須要使用gcnew進行建立,gcnew建立的對象不須要本身手動釋放內存。
GTable ^ ret = gcnew GTable();
命名空間用於限定類,不一樣於C#,這裏使用::進行分割。
virtual MyNameSpace::ITable ^ GetTable(int index);
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; }
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; }
String ^ MarshalString(char* os) { using namespace Runtime::InteropServices; String ^ ret = Marshal::PtrToStringAnsi(static_cast<IntPtr>(os)); return ret; }
String ^ MarshalString(wchar_t* os) { using namespace Runtime::InteropServices; String ^ ret = Marshal::PtrToStringUni((IntPtr)os); return ret; }
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;