VS 2005下编写及测试智能设备的非MFC的DLL
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 lpReserved12 )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)也能测试成功!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tidavery/archive/2011/01/05/6118887.aspx