重庆产品网站建设,sem seo 区别,企业网站建设的一般要素有,猪八戒建站服务【 声明#xff1a;版权所有#xff0c;欢迎转载#xff0c;请勿用于商业用途。 联系信箱#xff1a;feixiaoxing 163.com】 有的时候#xff0c;我们不想把所有的代码都放在一个exe里面#xff0c;这个时候我们就需要引入dll动态库的概念。在windows平台上面#xff0c…【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】 有的时候我们不想把所有的代码都放在一个exe里面这个时候我们就需要引入dll动态库的概念。在windows平台上面这个动态库就是dll文件在linux平台上面这个动态库就是so文件。不管是哪一种形式它们的运行方式都是差不多的那就是执行文件调用到具体函数的时候才会跳到动态库执行。dll还有一个好处那就是可以帮助我们提炼函数、类接口实现程序的动态加载。这样软件除了问题之后不需要重新编所有的代码只需要更新指定的dll文件就可以。 今天我们在编写qt软件的时候正好也可以学习下在cpp下函数和类是怎么做到dll里面的且能被外面的代码调用。 1、创建一个qt widget项目 和之前一样创建一个qt widget项目这个项目只是为了演示。不需要用widget在里面添加任何的内容。 2、在当前的solution里面添加一个dll项目 直接选择solution、添加、新建项目选择动态链接库确认就好。这样一个dll项目就被添加到这个项目里面来了。 3、添加导出函数代码 为了测试我们添加一个测试函数。函数的话按照正常的方法编写就可以了。不过有两个地方需要注意下第一就是需要添加一个extern C第二就是添加_declspec(dllexport)。这样后续的exe文件就可以看到这个被export出去的函数了。
// about function export
extern C _declspec(dllexport) int iterate(int data)
{if(data 1)return 1;return iterate(data - 1) data;
}4、添加导出类代码 除了函数还有一些类也是要被导出来的其实也是一样。不过和函数相比较类如果需要导出的话只需要添加一个_declspec(dllexport)就好了。
// about class export
class _declspec(dllexport) parent
{
public:parent() {}~parent() {}parent(parent) {};void display() { std::cout display function was invoked here! std::endl; }
};5、在exe可执行文件中添加函数和类的引用 前面我们在dll当中已经实现了需要导出的函数和类。那么在exe当中如果需要使用这些类和函数的话也需要添加相关的代码比如像这样
// about function import
extern C _declspec(dllimport) int iterate(int);// about class import
class _declspec(dllimport) parent
{
public:parent();~parent();parent(parent);void display();
}; 6、先编译dll然后在exe中引入dll 代码准备好了之后就可以先编译dll。因为编译好了之后就可以把dll库导入到exe项目当中去了。 7、exe项目中添加代码开始测试 所有条件都准备好了就可以添加代码测试了 // test code hereint aa iterate(10);parent pp;pp.display(); 测试的时候可以添加断点比如iterate是不是可以单步调试单步调试的时候会不会跳到dll工程去parent实例化是否成功实例化的时候是否可以跳到构造函数去display类函数是不是可以执行到是不是可以跳到dll里面去等等这些问题都可以通过单步调试来进行处理和验证。