想法:
1.com的方式(自定义的c# dll可以,对于手边的dll文件,不行)
2.clr工程的方式(qt里面的moc直接和clr冲突,编译报错,不行)
3.c#的dll + c++的clr工程dll + qt exe调用
---- c#的dll编写(示例Class1.cs) ----
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClassLibraryDll
{
public class Class1
{
public int testDllMut(int a,int b)
{
return a * b;
}
}
}
---- c++ clr的dll编写(示例testCppClrDll.h) ----
配置工程属性->添加引用->浏览(找到c# dll文件)->确定
testCppClrDll.h
#pragma once
using namespace System;
namespace testCppClrDll
{
public ref class Class1
{
public:
.....
};
}
注:该文件导出的类只能子啊clr工程或者c#工程(exe/dll)中才能调用。调用方式参考其他文章。
因为上面的文件testCppClrDll.h内容中头using...托管资源,在Qt中无法直接#using...使用, 必须新建文件(如SolidClrDll.h,SolidClrDll.cpp)
SolidClrDll.h
#pragma once
class __declspec(dllexport) Class2
{
public:
int mu2(int a,int b);
}
SolidClrDll.cpp
#include "stdafx.h"
#include "SolidClrDll.h"
#include <iostream>
using namespace ClassLibraryDll;
int Class2::mu2(int a,int b)
{
Class1^ c1 = gcnew Class1();
return 2*c1->testDllMut(a,b);
}
---- qt的控制台程序编写(示例Class1.cs) ----
#include <QtCOre/QCoreApplication>
#include <QDebug>
#include "../testCppClrDll/SolidClrDll.h"
#pragma comment(lib,"../x64/Debug/testCppClrDll.lib")
int main(int argc, char* argv[])
{
QCoreApplication a(argc,argv);
Class2 c2;
qDebug() << c2.mu2(2,6); // 24
return a.exec();
}