wince下dll的加载方法

转自

VS 2005下编写及测试智能设备的非MFC的DLL

http://www.cnblogs.com/yumn2004/archive/2010/03/30/1700550.html

 

Visual Studio 2005下创建智能设备的非MFC的Dll,打开“新建”项目后不会像EVC++一样出现“Win32 Dynamic-Link Library”的选项,

 它将智能设备的dll选项整合到“Win32智能设备项目”中,如下图所示:

                     

                     

命名好项目工程名“DllTest3”后确定。接下来是智能设备项目向导,简要概括之后要选择项目所依赖的SDK,这其中Pocket PC 2003和

Smartphone 2003支持ARMV4指令集,而Windows Mobile 5.0 Pocket PC SDK和Windows Mobile 6 Professional支持ARMV4I

指令集,本测试中选择目前常用的后者。

                      

                     

 

选择Dll所支持的SDK以后,即开始项目设置,本实例选择“Dll ”并附加“空项目”选项,如下图:

                       

完成后得到一个空的dll工程,分别给工程添加DllTest3.h和DllTest3.cpp文件:

                       

                    

 分别向两文件DllTest3.h和DllTest3.cpp添加如下内容:

  
  
1 // DllTest3.h 文件内容
2   //
3   #ifndef DLL_TEST2_H_
4  #define DLL_TEST2_H_
5
6  //定义导出函数
7  extern "C" __declspec(dllexport) int add(int x,int y);
8  #endif

 

  
  
1 // DllTest2.cpp : 定义 DLL 应用程序的入口点及导出函数
2   //
3  #include <windows.h>
4 #include <commctrl.h>
5
6 #include "DllTest3.h"
7
8
9 BOOL APIENTRY DllMain( HANDLE hModule,
10 DWORD ul_reason_for_call,
11 LPVOID lpReserved
12 )
13 {
14 return TRUE;
15 }
16
17  // ============================================================
18  //函数实体
19  int add(int x,int y)
20 {
21 return x+ y;
22 }

上述代码编写完成后,选择如下图所示的SDK进行编译:

               

 

这时候看看工程目录下是不是得到了编译结果?是的。在我们的“../DllTest3/Windows Mobile 6 Professional SDK (ARMV4I)/Debug”

目录下,可以看到非常熟悉、亲切的DllTest3.lib和DllTest3.dll文件了。

//============================================================================

接下来,是如何把我们得到的dll在模拟器或设备上进行测试。首先,在上述解决方案内新建名为CallDllTest3的工程,同样会有“项目概述”、

“平台SDK选择”和“应用程序设置”三个步骤,期中前两个步骤与新建dll时的设置完全相同,第三个步骤设置如下:

                    

在CallDllTest3工程的CallDllTest3.cpp文件中添加如下引用dll的语句(这里采用静态引用的方法,另外还有动态调用的方法,朋友们可以参

考宋宝华的《VC++动态链接库(DLL)编程深入浅出》一文):

  
  
1 #include "..//DllTest3//DllTest3.h"
2 #pragma comment(lib,"..//DllTest3//Windows Mobile 6 Professional SDK (ARMV4I)//Debug//DllTest3.lib")

在CallDllTest3.cpp文件的WinMain函数中添加如下测试语句 

  
  
1 MessageBeep(0); //测试系统api函数
2 int sum = 0 ;
3 sum = add(1,0); //调用dll中的函数,本实例中采用静态链接的方式
4 if (sum == 1) //函数调用成功
5 {
6 MessageBoxW(NULL,_T("测试智能设备Dll成功。"),_T("Yu Minglang" ),sum);
7 }
8 else //函数调用不成功
9 {
10 MessageBoxW(NULL,_T("测试智能设备Dll未成功。"),_T("Yu Minglang"),0 );
11 }

将CallDllTest3工程设置为启动工程,选择“Windows Mobile 6 Professional SDK (ARMV4I)”进行编译,出现如下警告:

“ 1 warning LNK4099: 未找到 PDB“libbmtd.pdb”(使用“D:/Program Files/Microsoft Visual Studio 8/VC/ce/lib/ARMV4I/LIBCMTD.lib”

或在“e:/CPP2005/DllTest3/CallDllTest3/Windows Mobile 6 Professional SDK (ARMV4I)/Debug/libbmtd.pdb”中寻找);正在链接对象,

如同没有调试信息一样 LIBCMTD.lib ”

上述敬告是因为安装了VS2005 sp1所致,此警告可忽略,或参看msdn。

 

将上述程序在CHS Windows Mobile 6 Professional Emulator中运行程序,出现下面的错误:

            

朋友们可千万别按系统提示的方法做,原因是刚刚编译好的dll这时候还在本地电脑上,并没有拷贝到模拟器或设备的program files文件夹下的CallDllTest3

目录中。我们把一开始编译得到的DllTest3.lib和DllTest3.dll拷贝到“/Program Files/CallDllTest3”中(要这样做,可别忘了要事先同步模拟器或设备)。

最后,再次运行,得到结果:

                                    

 经验证在设备中(我的是多普达P860)也能测试成功!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值