实现需求:QT生成x86和x64的DLL,通过.NET封装成AnyCpu的DLL供调用,需要在AnyCpu中自动调用对应位数的DLL。
老版本QT官方没有提供MinGw64位,自己编译时间太长且还容易出错,所以选择的官方带有ming64的Qt版本。
官网在线安装器下载 http://download.qt.io/official_releases/online_installers/
我是选择的5.12.2,记得勾选MinGw 64位,然后继续安装完毕。
打开QT Creator创建C++ Libray,选择
,构建32和64的DLL。
由于我这是C接口给C#调用,头文件中输入
extern "C" __declspec(dllexport) int DLLAdd();
源文件中实现。
然后构建项目,对应编译目录中会生成DLL。
注意:需要将附带的QT环境的DLL包拷贝到编译目录,与需要使用的DLL放置在同一个目录,我这里用到这几个
,如果不带入进去的话,.NET调用时会出错,也可以通过Depends工具排查DLL中缺少哪些依赖库,复制过去就行。
VS中创建C#的DLL项目,将QT编译出来的库和其他依赖库放置到项目根目录中,然后通过代码进行引用:

配置成AnyCpu模式,这样就能自动切换对应DLL。

点击生成DLL。
接着将生成DLL和其他依赖库导入到需要使用的项目中

然后引用ClassLibrary2.dll,调用对应接口:
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
txt.Content = Class1.BitTest();
}
}
到此基本实现需求。

WpfApp1.exe运行效果。
x64运行:

32位运行:

本文介绍了实现QT生成x86和x64的DLL,再通过.NET封装成AnyCpu的DLL供调用的方法。包括选择带有ming64的Qt版本进行安装,在QT Creator创建C++ Libray构建DLL,在VS中创建C#的DLL项目引用并配置成AnyCpu模式,最后导入使用。
7250





