• Windows下使用Dev C++ 编写dll与使用dll(一)C项目下的dll


    Dev C++时很方便上手的东西,下载安装的exe,一路运行,即可成功安装,这里就不叙述下载及安装过程了。

    实在是很方便,下载链接暂时也不贴了。

     打开编译器,文件->新建->项目

     这里先选择C项目,点击确定,即会自动生成一个.c和一个.h文件。

     

     这里自动生成的Hello()程序,一运行就会弹出一个信息框。

    我们直接点击编译运行,保存文件后,就会生成一个dll文件。

    注意右边的32位版本,很重要,因为编译生成的32位dll只能在32位编译器下调用,64位只能在64位编译器下调用。

    这样,即代表成功生成dll文件,项目名为test1,这里生成了test1.dll

    我们在这个目录下写一个test.cpp对这个dll进行测试。

    #include<iostream>
    #include<windows.h>
    using namespace std;
    int main()
    {
    	typedef void (*Hello)();
    	HMODULE hMod = LoadLibrary("test1.dll");
    	if(hMod!=NULL)
    	{
    		cout<<"dll调用成功";
    		Hello hello = (Hello)GetProcAddress(hMod,"HelloWorld");
    		hello();
    	}
    	else
    	{
    		cout<<"dll调用失败";
    	}
    }
    

      直接点击编译运行。

    运行成功,输出了调试语句以及HelloWorld()中弹出的信息框。

    易语言调用dll命令就和这个是一样的。

    C语言中要引入<windows.h>

    用LoadLibrary()引入dll文件。

    用GetProcAddress获取dll中指定函数名的函数地址,结合上面的typedef void (*Hello)()。表示引入一个无返回类型,也无参数的函数。

    我们在dllmain.c中,再次添加一个add函数,如下:
    DLLIMPORT int add(int a,int b)
    {
    	return a+b;
    }
    
    在dll.h中,添加如下定义,重新编译运行。
    DLLIMPORT int add(int,int);
    生成一个新的dll。
    
    重新写一个新的test1.cpp。
    代码如下。
    #include<iostream>
    #include<windows.h>
    using namespace std;
    int main()
    {
    	typedef int (*Hello)(int,int);
    	HMODULE hMod = LoadLibrary("test1.dll");
    	if(hMod!=NULL)
    	{
    		cout<<"dll调用成功<<endl";
    		Hello hello = (Hello)GetProcAddress(hMod,"add");
    		cout<<hello(5,6)<<endl;
    	}
    	else
    	{
    		cout<<"dll调用失败";
    	}
    }
    

     这样就表示引入一个返回整数类型,参数为两个整数类型的函数。

    点击运行,结果如下:

    如果我们把右上角改成64位的编译器,如图:

     再点击编译运行,就无法引入刚才的dll:

    可见,dll的调用与生成与编译器的版本有很大关系,如果需要生成64位的dll,在编译生成dll中选择64位的编译器即可。

  • 相关阅读:
    nginx详解
    keeplived高可用集群
    mysql主从同步
    elasticsearch基础
    redis集群管理--sentinel
    socket阻塞与非阻塞,同步与异步,select,pool,epool
    django+channels+dephne实现websockrt部署
    Django+Nginx+uWSGI生产环境部署
    进制转换
    对golang指针的理解
  • 原文地址:https://www.cnblogs.com/dayq/p/14342258.html
Copyright © 2020-2023  润新知