VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之C#调用C++(QT5.5.1项目)的C++/CLI(CLR项目

导航

  1.编译环境

  2.项目配置

    1.设置附加包含目录

    2.设置附加库目录

    3.设置附加依赖项

  3.CLR中各种定义

    1.接口定义

    2.类定义

    3.枚举定义

    4.属性定义

  4.CLR中各种使用

    1.类的实例化

    2.命名空间的使用

  5.CLR中数据类型的转换

    1.String ^ 到 QString 的转换

    2.QString 到 String ^ 的转换

    3.char * 到 String ^

    4.wchar_t * 到 String ^

    5.数组的转换

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创建的对象不需要自己手动释放内存。

1
GTable ^ ret = gcnew GTable();

2.命名空间的使用

命名空间用于限定类,不同于C#,这里使用::进行分割。

1
virtual MyNameSpace::ITable ^ GetTable(int index);

5.CLR中数据类型的转换

1.String ^ 到 QString 的转换

1
2
3
4
5
6
7
8
9
10
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 ^ 的转换

1
2
3
4
5
6
7
8
9
10
11
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;
}