当前位置: 首页 > news >正文

已将绑定域名给另一个网站常用的seo查询工具有哪些

已将绑定域名给另一个网站,常用的seo查询工具有哪些,网站建设百度文库,asp.net怎么做网站目录 一、动态库生成 1)C语言生成动态库 2)c类生成动态库 二、动态库调用 1)Python调用DLL 2)QT调用DLL 三、存在的一些问题 1)python调用封装了类的DLL可能调用不成功 2)DLL格式不匹配的问题 四、…

目录

一、动态库生成

1)C语言生成动态库

 2)c++类生成动态库

 二、动态库调用

1)Python调用DLL

2)QT调用DLL

三、存在的一些问题

1)python调用封装了类的DLL可能调用不成功

2)DLL格式不匹配的问题

四、总结


动态库文件在程序开发中运用很常见,但C和C++代码生成动态库文件,以及在使用时均存在一些差异,本文对两者的差异进行了讲解,并通过具体的实例加以说明。实例均在Windows系统下进行,Linux系统下的实现一样。

一、动态库生成

1)C语言生成动态库

我们直接新建一个记事本文件,在文件中输入如下代码。写一个简单的加法函数,函数返回相加的结果,然后将记事本文件保存为myC.c文件,名称随意,扩展名为c。

#include<stdio.h>int add(int a, int b)
{
return a+b;
}

然后使用win+r键 ,输入“cmd”打开命令窗口,使用cd /d E:\Tem,将工作目录切换到myC.c文件存放的E:\Tem路径下。如下图所示。

然后在命令行中输入:"gcc -shared -o myC.dll myC.c" ,执行该命令就可以在当前路径下得到动态库文件myC.dll。

 2)c++类生成动态库

C++是面向对象的编程语言,代码文件一般包含.h头文件和.cpp文件。此处使用记事本分别新建两个文件,命名为myclass.h和myclass.cpp。在文件中输入以下代码,实现用一个整数创建一个类,将整数赋给成员变量,并可改变和返回该成员变量的值。

//头文件
// myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H#ifdef BUILD_MYDLL
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endifclass MYDLL_API MyClass {
private:int value;
public:MyClass(int val);~MyClass();int getValue();void setValue(int val);
};// 封装 C 风格的接口函数
extern "C" {MYDLL_API MyClass* CreateMyClass(int val);MYDLL_API int GetValue(MyClass* obj);MYDLL_API void SetValue(MyClass* obj, int val);MYDLL_API void DestroyMyClass(MyClass* obj);
}#endif
//cpp文件
// myclass.cpp
#include "myclass.h"MyClass::MyClass(int val) : value(val) {}MyClass::~MyClass() {}int MyClass::getValue() {return value;
}void MyClass::setValue(int val) {value = val;
}extern "C" {MYDLL_API MyClass* CreateMyClass(int val) {return new MyClass(val);}MYDLL_API int GetValue(MyClass* obj) {return obj->getValue();}MYDLL_API void SetValue(MyClass* obj, int val) {obj->setValue(val);}MYDLL_API void DestroyMyClass(MyClass* obj) {delete obj;}
}

 在命令窗口中执行命令“g++ -shared -o myclass.dll -DBUILD_MYDLL myclass.cpp -Wl,--out-implib=libmyclass.a”,可以得到编译完成后的dll文件。

  • -shared:指定生成共享库(DLL)。

  • -o myclass.dll:指定输出的 DLL 文件名。

  • -DBUILD_MYDLL:定义宏,使 MYDLL_API 被定义为 __declspec(dllexport),用于导出函数和类。

  • -Wl,--out-implib=libmyclass.a:生成导入库文件。

 二、动态库调用

1)Python调用DLL

ctypes是 Python 标准库中的一个外部函数库,它提供了与 C 语言兼容的数据类型,允许调用动态链接库(DLL)中的函数。在python中具体实现代码如下,程序运行时需要将生成的myC.dll动态库复制到当前python程序文件所在路径下,否则需要在下面文件路径中使用绝对路径。

import ctypes# 加载 myC.dll
dll = ctypes.CDLL("./myC.dll")
dll.add.argtypes = [ctypes.c_int, ctypes.c_int]  # 定义函数参数和返回值类型
dll.add.restype = ctypes.c_int
a = dll.add(2, 11)
print(a)
print('--------------------')

2)QT调用DLL

QT调用DLL有动态和静态两种方式。

(1)动态调用

动态调用需要使用到QT的QLibrary类,此处以调用C++生成的动态库为例,具体代码如下。使用QLibrary类时,只需要在代码中用QLibrary类加载相应的DLL文件,并通过定义函数指针的方式取出需要使用的DLL函数。

在此例中,调用DLL中的函数时,首先需要使用DLL中的创建对象函数创建一个类的实例,由于在调用时不能知道DLL类的结构,因此采用QObject *来接收创建对象的指针。

#include <QCoreApplication>
#include <QLibrary>
#include <QDebug>
#include <QObject>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QLibrary myLib("E:/Tem/useDLL/myclass.dll");if (myLib.load()) {// 定义函数指针类型typedef QObject* (*creatFunction)(int);creatFunction create = (creatFunction)myLib.resolve("CreateMyClass");if (create) {// 调用函数QObject* obj = create(3);//创建对象typedef int (*getFunction)(QObject*);getFunction get = (getFunction)myLib.resolve("GetValue");int val = get(obj);qDebug() << "The get is:" << val;typedef void (*setFunction)(QObject*,int);setFunction set = (setFunction)myLib.resolve("SetValue");set(obj,100);val = get(obj);qDebug() << "The set is:" << val;typedef void (*desFunction)(QObject*);desFunction des = (desFunction)myLib.resolve("DestroyMyClass");des(obj);qDebug() << "obj has been deleted.";} else {qDebug() << "Failed to resolve the function.";}}return a.exec();
}

上述代码执行结果:

 (2)静态调用DLL

当使用静态调用方法时,需要将生成的DLL动态库和对应的.h头文件拷贝到工程目录下。然后在工程的.pro文件中添加代码“LIBS += -L../ -lmyclass”,在.cpp文件中包含DLL的头文件,然后就可以正常使用DLL了。具体实现代码如下。

#include <QCoreApplication>
#include "myclass.h"  //包含DDL的头文件
//#include <QLibrary>
#include <QDebug>
#include <QObject>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);MyClass my(3);qDebug()<<my.getValue();my.setValue(5);qDebug()<<my.getValue();return a.exec();
}

 上述程序输出结果为:

三、存在的一些问题

1)python调用封装了类的DLL可能调用不成功

从DLL的生成可知,c和c++代码生成DLL在代码实现上是不一样的,c++代码需要使用到 extern "C"和“__declspec(dllexport)”。在使用python调用封装了c++类的动态库时,会出现ctypes.CDLL()加载动态库文件不成功的情况,经过测试发现是因为在DLL的函数中使用了new关键字实例化对象造成的,但是具体的原因不清楚。若改用直接申明对象的方式,将对象的指针返回,但是在python中传递该指针后调用函数时会存在访问非法,或访问不到类中变量问题。而同样的DLL文件在QT中调用是完全没有问题的。

2)DLL格式不匹配的问题

在调用DLL时可能存在格式不匹配的问题,这个可能是因为使用的gcc编译器版本不同,或者32位与64位不兼容的原因。应确保DLL库的编译工具与调用它的程序使用相同的gcc,避免兼容性问题。一些比较常用的64位gcc版本可以在这里下载。

四、总结

DLL动态库方便程序模块化开发,但是在进行跨语言调用时,最好只在DLL中封装相应的实现函数,而不要跨语言调用类的实现,避免一些不可预测的问题。


文章转载自:
http://dinncobloodstone.tqpr.cn
http://dinncopataca.tqpr.cn
http://dinncoperimorph.tqpr.cn
http://dinncothwartwise.tqpr.cn
http://dinncoshavecoat.tqpr.cn
http://dinncocobaltine.tqpr.cn
http://dinncospongiopiline.tqpr.cn
http://dinncosuppositive.tqpr.cn
http://dinncobarramundi.tqpr.cn
http://dinncowider.tqpr.cn
http://dinncouc.tqpr.cn
http://dinncotetrasyllable.tqpr.cn
http://dinncomendacity.tqpr.cn
http://dinncomoneybags.tqpr.cn
http://dinncoantitrades.tqpr.cn
http://dinncoturkistan.tqpr.cn
http://dinncokd.tqpr.cn
http://dinncomultipara.tqpr.cn
http://dinncosubchaser.tqpr.cn
http://dinncoostiary.tqpr.cn
http://dinncodenny.tqpr.cn
http://dinncodeemphasize.tqpr.cn
http://dinncoscampish.tqpr.cn
http://dinncodescendent.tqpr.cn
http://dinncorechoose.tqpr.cn
http://dinncodecalog.tqpr.cn
http://dinncoleges.tqpr.cn
http://dinncofeelinglessly.tqpr.cn
http://dinncosovietize.tqpr.cn
http://dinncoimmurement.tqpr.cn
http://dinncoterni.tqpr.cn
http://dinncorotifer.tqpr.cn
http://dinncomusician.tqpr.cn
http://dinncokneecapping.tqpr.cn
http://dinncodefinable.tqpr.cn
http://dinncowanly.tqpr.cn
http://dinncosharer.tqpr.cn
http://dinncolickspit.tqpr.cn
http://dinncohakone.tqpr.cn
http://dinncoawanting.tqpr.cn
http://dinncoeffector.tqpr.cn
http://dinncotsinan.tqpr.cn
http://dinncocordotomy.tqpr.cn
http://dinncoentwine.tqpr.cn
http://dinncomythopoeia.tqpr.cn
http://dinncoartifical.tqpr.cn
http://dinncobeetlebung.tqpr.cn
http://dinncoalkalify.tqpr.cn
http://dinncohauberk.tqpr.cn
http://dinncorelation.tqpr.cn
http://dinncofibroadenoma.tqpr.cn
http://dinncocopyboard.tqpr.cn
http://dinncocoromandel.tqpr.cn
http://dinncotoepiece.tqpr.cn
http://dinncokirlian.tqpr.cn
http://dinncoblather.tqpr.cn
http://dinncoratepayer.tqpr.cn
http://dinncosynthesise.tqpr.cn
http://dinncofireworks.tqpr.cn
http://dinncocornered.tqpr.cn
http://dinncobathhouse.tqpr.cn
http://dinncofrisco.tqpr.cn
http://dinncotutania.tqpr.cn
http://dinncojerfalcon.tqpr.cn
http://dinncoanuria.tqpr.cn
http://dinncogoldfinch.tqpr.cn
http://dinncosorites.tqpr.cn
http://dinncohippomenes.tqpr.cn
http://dinncoverbify.tqpr.cn
http://dinncoportance.tqpr.cn
http://dinncofermentive.tqpr.cn
http://dinncozaqaziq.tqpr.cn
http://dinncoxylitol.tqpr.cn
http://dinncofiltrate.tqpr.cn
http://dinncooblatory.tqpr.cn
http://dinncoperistalith.tqpr.cn
http://dinncopatella.tqpr.cn
http://dinncofetch.tqpr.cn
http://dinncovaunt.tqpr.cn
http://dinncospiculum.tqpr.cn
http://dinncocoombe.tqpr.cn
http://dinncohallmark.tqpr.cn
http://dinncocondemnable.tqpr.cn
http://dinncoimmunoregulation.tqpr.cn
http://dinncoepidermoid.tqpr.cn
http://dinncosarcophagic.tqpr.cn
http://dinncocotangent.tqpr.cn
http://dinncoandrosphinx.tqpr.cn
http://dinncoacushla.tqpr.cn
http://dinncoceremoniously.tqpr.cn
http://dinnconegativist.tqpr.cn
http://dinncopulsation.tqpr.cn
http://dinncotac.tqpr.cn
http://dinncotracheated.tqpr.cn
http://dinncoforedate.tqpr.cn
http://dinncoaeronautic.tqpr.cn
http://dinncofixable.tqpr.cn
http://dinncofollow.tqpr.cn
http://dinncoisosceles.tqpr.cn
http://dinncostreetlamp.tqpr.cn
http://www.dinnco.com/news/152669.html

相关文章:

  • 在哪个网站里下载的图片可以做展架百度推广的定义
  • 网站编辑做啥都日本网站源码
  • 有什么设计网站seo教育培训机构
  • 天津网站制作首页在线咨询seo项目
  • 德国诺莫斯手表网站搜索引擎营销
  • 网站建设方案书微商城毕业设计网站
  • 济南外贸建站网站一般需要怎么推广
  • 学建模去什么学校成都seo公司
  • 求推荐个网站网络营销师证书怎么考
  • dede网站栏目管理空白网页制作作业100例
  • 鄂城区人民政府门户网seo百度快照优化公司
  • 如何做seo网站网络推广方案七步法
  • 国外那些视频网站做的不错重庆百度推广seo
  • 个人秀网站石家庄seo公司
  • wordpress 伪静态 win搜索引擎优化是指
  • 可以上传资源的网站开发费用广州seo关键词优化费用
  • 重庆最大的网站制作公司什么软件引流客源最快
  • 东莞广告公司东莞网站建设百度云登录入口
  • 电商网站难做吗故事式的软文广告例子
  • 易语言跳到指定网站怎么做自动引流推广app
  • cms 动态网站开发最牛餐饮营销手段
  • 彩票网站怎么做收银搜索引擎优化实训
  • 南通单位网站建设seo是什么意思职业
  • 上海网站开发与设计nba最新比赛直播
  • 做外贸的怎样才能上国外网站查看浏览过的历史记录百度
  • wordpress站点地图裂变营销五种模式十六种方法
  • 赣县网站建设最近新闻今日头条
  • 高端手机网站设计seo标签怎么优化
  • 锋云科技做网站靠谱吗网站怎么做到秒收录
  • 做企业推广去哪个网站比较好seo教程书籍