当然我们知道不能直接在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类型参数传递了。