通过QT Creator将QT控件编译成C++库,即dll,C#和VC通过dll调用QT控件。
需要在QT Creator中使用qtwinmigrate,将qt控件封装为一个函数接口,通过Pinvoke与C#和VC交互。
注意:函数接口中不能出现以下语句
QApplication a(argc, argv);
qtwinmigrate在生成dll的过程中会预先定义一个QApplication 对象,而qt只允许一个QApplication 对象存在。如果这样做,运行dll时会报错:
ASSERT failure in QCoreApplication: "there should be only one application object", file kernel\qcoreapplication.cpp
应该这样做:
QApplication* qapp_instance = qApp;
在dll中定义一个全局的QApplication对象指针,指向全局的qApp(在qapplication.h源码中定义),通过这个对象指针访问QApplication对象,如进行以下操作:
qapp_instance->exec();
调用qt控件dll时,需要附带qt的dll