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;