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類型參數傳遞了。

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