當然我們知道不能直接在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類型參數傳遞了。