创建使用dll

       没有尝试过写DLL,一直都是用QT写点小例子,这篇主要是写给自己看的,希望自己以后不至于忘了曾经自己为了了解dll所做的努力。

       我使用的环境是VC6, 跟普通的文件一样,利用创建文件向导,创建工程MFC AppWizard(dll) ,选择好路径, 命名, 选择默认选项,下一步, 完成编译后,这样一个空壳的dll就出来了。我们这里想在dll中导出一个打印输出hello world的函数void print()以供其他exe调用 

     1. 我按照上面的流程建立的dll工程名称叫testdll, 在文件路径下面会产生两个对应的文件, testdll.cpp 和 testdll.h , 在头文件里面我们需要定义所希望能够被其他程序所利用的函数,

所以我们在testdll.h中语句:#include "resource.h" 后面添加上一句:

        extern "C"  void __declspec(dllexport)  print(); 

       告诉编译器,这个函数是dll对外提供的函数。而在此同时,我们还需要在对应的testdll.cpp中提供函数的实现,我们就简单的实现以下内容

    (添加到CTestdllApp theApp ; 后一行)

        extern "C" void __declspec(dllexport)  print(){

                      CString  str = "hello world";

                      AfxMessageBox(str);

            }

        这样我们对外的函数,就写完成了,在此语句中 __declspec(dllexport) 是导出函数关键字,还可以导出类等其他的东西。编译链接过后,就会在工程目录下面,生成一个testdll.dll的文件,这个就是我们需要的dll文件。

     2. 我们同样建立一个工程来测试这个dll,在文件向导的创建过程中,我们选择MFC AppWizard(exe) , 名为(testdll1) ,点击下一步完成。在资源对话框中主窗体上,双击确定按钮,进入到按钮事件的处理代码处,添加:

      void CTestdll1Dlg::OnOK() 
     {

             HMODULE hins = LoadLibrary("testdll.dll");

             if(hins){

                   typedef void (*PROCTYPE)();

                   PROCTYPE myprint = (PROCTYPE)GetProcAddress(hins,"print");

                   (*myprint)();

             }

            FreeLibrary(hins);  

      }

编译,链接然后将开始生成的testdll.dll放置到此工程生成的exe路径下,运行此程序,点击确定按钮,就会调用dll中的print函数,弹出对话框"hello world"了

     

     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值