导航
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;