QT中调用C#封装的DLL如何传string类型的参数

    技术2022-07-10  142

    当然我们知道不能直接在Qt中调用C#封装的dll,我这边采用的实现方案是先用VS建好C#类库项目,再用VS创建CLR项目调用上一步生成的DLL,得到.lib和.dll供Qt项目调用。具体操作步骤参考的这篇博文:

    https://blog.csdn.net/u012902367/article/details/105128531 在此也感谢该文博主。

    函数库调用成功后,遇到一个问题是如何将C#函数中的System::String类型的参数传出来,在Qt中得到QString类型的数据。

    经过探索以及实验,发现以下步骤可行:

    C#项目函数定义中参数为ref String formula;CLR C++项目函数定义中参数为char** formula,在函数体中新建System::String对象:

             String^ clr_formula = gcnew String("");

             去调用C#生成的DLL函数;

            之后的问题就是如何把clr_formula转换为char** formula。经过N次尝试之后,下面代码可行:

             int len1 = ((clr_formula->Length + 1) * 2);

             *formula = new char[len1];

             pin_ptr<const wchar_t> wch = PtrToStringChars(clr_formula);

              wcstombs(*formula, wch, len1);

          3.Qt项目中新建char* formula = nullptr;对象,用&formula去调用CLR C++生成的DLL中的函数。再用QString(formula)构造成QString对象。

    至此可以进行String类型参数传递了。

    Processed: 0.010, SQL: 9