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

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

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

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

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

  1. C#项目函数定义中参数为ref String formula;
  2. 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类型参数传递了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章