静态调用MyCEDLL

  1.静态调用MyCEDLL

  在本章的第2节中介绍了调用DLL的两种方式:静态调用和动态调用,在下面的示例中就来演示使用静态方法调用上面创建的MyCEDLL.dll的步骤。

  (1)使用VS2008智能设备MFC智能设备应用程序向导创建一个基于对话框的应

  用程序CallDLLByStatic,编译环境设置为yincheng_OS。

  (2)将MyCEDLL工程中的MyCEDLL.dll和MyCEDLL.1ib两个文件拷贝到本工程目录下,然后选择VS2008主菜单中的“项目ICalIDLLByStatic属性”项打开项目属性设置窗口,右边导航栏选择“配置属性J链接器I输入”,在该页框中的“附加依赖项”输入框中输入

  MyCEDll.1ib,实际页面下图所示。

  (3)将MyCEDLL工程的MyCEDLL.h头文件拷贝到本工程目录中,并且在CaIlDLLByStaticDl9.cpp文件中引用MyCEDLL.h头文件,代码如下: #include”MyCEDLL.h” 如图12-4

  图12-4配置DLL调用

  (4)在对话框窗体上放置一个“调用”按钮,通过单击该按钮来实现调用MyCEDLL中TestDll方法的功能。“调用”按钮的单击事件代码如程序

  //演示静态调用DLL

  void CCallDLLByStaticDlg::0nBnClickedBtnCall()

  {

  //TestDll函数为MyCEDLL.dll中的一个输出函数

  TestDll();

  }

  (5)编译并下载到yincheng.OS\RelDir\VirtualPC_x86_Release在虚拟机中运行,单击“调用”按钮后效果如下。效果如图12-5

  图12-5程序效果图

  在上中介绍了以静态方式调用DLL的示例,在下面的示例中将继续介绍以动态方式调用DLL的方法步骤,这里还是以MyCEDLL.dll文件为例。

  (1)使用VS2008智能设备IMFC智能设备应用程序向导创建一个基于对话框的应用程序CallDLLByDynamic,编译环境设置为yincheng_OS SDK)。

  (2)在CallDLLByDynamicDlg.h文件中添加MyCEDLL文件中的TestDll函数定义,代码如下:

  //定义MyCEDLL.dll中TestDll输出函数原型

  typedef void(*pTestDII)(void);

  (3)在对话框上放置一个“调用”按钮,用来调用MyCEDLL文件中的TestDll函数,该按钮的单击事件代码如下列所示。

  //动态调用DLL示例

  void CCallDLLByDynamicDlg::OnBnClickedBtnCall()

  {

  //1、加载DLL

  HINSTANCEhModule = LoadLibrary(_T("MyCEDLL.dll"));

  if (hModule == NULL)

  {

  AfxMessageBox(_T("加载DLL失败"));

  return;

  }

  //得到MyCEDLL中TestDll函数地址

  pTestDll pFun = (pTestDll)GetProcAddress(hModule,_T("TestDll"));

  if ( pFun == NULL )

  {

  AfxMessageBox(_T("获取TestDll函数失败"));

  }

  else

  {

  //执行MyCEDLL中TestDll函数

  pFun();

  }

  //3、释放DLL;

  FreeLibrary(hModule);

  }

  (4)编译并下载到模拟器中运行,其运行界面如图l2-6所示。

  图12-6程序运行效果

  12.3.2 基于mfc的regular dll的创建

  基于MFC的Regular DLL是用MFC类库编写的,其明显的特点就是在源文件里有一个继承CWinApp的类。该类动态链接库的输出函数具有如下形式:

  extern ”C” EXPORT YourExportedFunction()j

  如果没有extern”C”修饰,输出函数仅仅只能从C++代码中调用。

  注意:所有从DLL输出的函数都应该以如下语句开始:

  AFX—MANAGE—STATE(AfxGetStaticModuleState())

  以上语句用来正确地切换MFC模块状态。Regular DLL能够被所有支持DLL技术的语言所编写的应用程序调用。在这种动态连接库中,它必须有一个从CwinApp类继承下来的类,DllMain函数被MFC所提供,不用显式地写出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值