Windows Mobile和Wince(Windows Embedded CE)下封装Native DLL进一步探讨

简介:

之前写过一篇关于Windows Mobile和Wince(Windows Embedded CE)下封装Native DLL的文章,原文如下:

Windows Mobile和Wince(Windows Embedded CE)下如何封装Native DLL提供给.NET Compact Framework进行调用

 

原文主要针对如何封装的Native DLL提供给.NET Compact Framework的程序来调用。但是如果按照原文的方法进行封装,使用Native C++调用该封装DLL会有一些麻烦,需要动态加载该DLL,关于动态加载,我之前也写过一篇文章,原文如下:

如何在Windows Mobile下使用Native C++动态加载DLL

 

动态加载有其好处,但是如果封装的DLL和调用方都是内部的程序,使用初始化时候加载(也叫做静态加载),在开发时会更加方便和简单。下面讲述如何封装DLL为调用方提供静态加载服务。

1.建立输出定义头文件

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the MY32FEETWIDCOMM_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// MY32FEETWIDCOMM_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef MY32FEETWIDCOMM_EXPORTS
#define MY32FEETWIDCOMM_API __declspec(dllexport)
#else
#define MY32FEETWIDCOMM_API __declspec(dllimport)
#endif

// This class is exported from the 32feetWidcommWM.dll
class MY32FEETWIDCOMMWM_API CMy32feetWidcommWM {
public:
CMy32feetWidcommWM(void);
// TODO: add your methods here.
};

extern MY32FEETWIDCOMMWM_API int nMy32feetWidcommWM;

MY32FEETWIDCOMMWM_API int fnMy32feetWidcommWM(void);

调用方需要#include该头文件。

 

2.实现头文件提供的接口

// 32feetWidcommWM.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "32feetWidcommWM.h"
#include <windows.h>
#include <commctrl.h>

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

// This is an example of an exported variable
MY32FEETWIDCOMMWM_API int nMy32feetWidcommWM=0;

// This is an example of an exported function.
MY32FEETWIDCOMMWM_API int fnMy32feetWidcommWM(void)
{
return 42;
}

// This is the constructor of a class that has been exported.
// see 32feetWidcommWM.h for the class definition
CMy32feetWidcommWM::CMy32feetWidcommWM()
{
return;
}

 

3.配置预编译宏(Preprocessor Definitions)

 export-dll-2

封装DLL的项目会输出接口 __declspec(dllexport) ,而调用方会输入接口 __declspec(dllimport) ,见头文件定义。

4.配置输出lib文件

export-dll-1

调用方需要链接该lib文件。

 

完成了。


    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/11/18/Windows-Mobile-Native-DLL.html,如需转载请自行联系原作者



相关文章
|
编解码 Ubuntu 编译器
Qt开发笔记之编码x264码流并封装mp4(四):mp4v2库的介绍和windows平台编译
Qt开发笔记之编码x264码流并封装mp4(四):mp4v2库的介绍和windows平台编译
Qt开发笔记之编码x264码流并封装mp4(四):mp4v2库的介绍和windows平台编译
|
6月前
|
开发框架 JavaScript .NET
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
|
9月前
|
监控 安全 虚拟化
深入浅出:NSSM封装Windows服务工具的使用与介绍
深入浅出:NSSM封装Windows服务工具的使用与介绍
328 3
|
安全 搜索推荐 虚拟化
windows系统封装介绍
windows系统封装介绍
259 0
|
存储 程序员 编译器
windows下的串口编程,串口操作类封装
windows下的串口编程,串口操作类封装
|
Windows
太阳当空照-Windows服务化方式脚本封装sc指令(下)
太阳当空照-Windows服务化方式脚本封装sc指令(下)
130 0
|
Windows
太阳当空照-Windows服务化方式脚本封装sc指令(上)
太阳当空照-Windows服务化方式脚本封装sc指令
163 0
|
网络协议 Linux 编译器
C/C++封装:Windows/Linux下封装.lib/.so文件
这里提供了两个C/C++中服务器与客户端之间通讯的两个程序,程序中封装了通信之间的函数方法,我们以这个程序为例进行封装。
344 0
|
编译器 Linux C语言
【C 语言】动态库封装与设计 ( Windows 动态库简介 | Visual Studio 调用动态库 )
【C 语言】动态库封装与设计 ( Windows 动态库简介 | Visual Studio 调用动态库 )
297 0
【C 语言】动态库封装与设计 ( Windows 动态库简介 | Visual Studio 调用动态库 )
|
Linux API C语言
Windows下静态、动态库的封装和使用(图解)(下)
Windows下静态、动态库的封装和使用(图解)
289 0
Windows下静态、动态库的封装和使用(图解)(下)