当前位置:主页   - 电脑 - 程序设计 - C/C++
Windows Mobile下Native C++动态加载DLL
来源:网络   作者:Jake.NET   更新时间:2011-08-06
收藏此页】    【字号    】    【打印】    【关闭

  背景

  Windows Mobile Sensors API库的一个重要的功能是自动发现(detect)和判断(determine)设备类型,调用相应设备(HTC或者Samsung)上的Sensor API,并返回统一的结果。因此该库不能依赖于任何设备的上的Sensor库。因此产生了动态加载各自设备上Sensor库的需求。

  简介

  本文以Windows Mobile Sensors API库为例子讲述在Windows Mobile下使用Native C++动态加载DLL的方法。

  静态加载DLL的方法

  使用Native C++的开发,一般使用静态加载的方法加载DLL,所谓静态加载就是在程序编译时(Compile Time)直接调用DLL的头文件定义的函数,链接时(Link Time)链接*.lib文件指向DLL的接口,在程序开始运行时(Run Time Start up)加载DLL。

  下面讲述使用静态加载DLL的方法,在程序中需要指定加载的*.lib文件,用于链接(Link)。

#pragma comment(lib, "SamsungMobileSDK_1.lib")

  使用静态加载的DLL可以直接调用头文件定义的函数,例如:

SmiAccelerometerCapabilities cap;
if( SmiAccelerometerGetCapabilities(&cap) != SMI_SUCCESS)
{
    throw;
}
SmiAccelerometerHandler h = &GetVectorHandler;
if(SmiAccelerometerRegisterHandler(1000, h) != SMI_SUCCESS)
{
    throw;
}

  SmiAccelerometerGetCapabilities()和SmiAccelerometerRegisterHandler()是定义在头文件smiAccelerometer.h中的,可以直接调用,定义如下:

/**
 *  Start receiving accelerometer data periodically.
 *
 *  The period interval must be a multiple of the callbackPeriod specified
 *  in SmiAccelerometerCapabilities. If it is less than the callbackPeriod, it will be
 *  set to the callbackPeriod. If it is not a multiple of the callbackPeriod, it will be
 *  truncated to fit the value. ( (period / callbackPeriod) * callbackPeriod )
 *  
 *  Only one handler per process is allowed. Successive calls per process will replace the previous handler
 *  function and period.
 *
 *  @param    period    [in]    callback interval.   
 *  @param    handler   [in]    callback function for every period interval.  
 *
 *  @return                     
 *                              SMI_SUCCESS on success
 *  \n                          SMI_ERROR_INVALID_PARAMETER if the handler input parameter is NULL
 *  \n                          SMI_ERROR_DEVICE_NOT_FOUND if the device is not present or supported
 *  \n                          SMI_ERROR_CANNOT_ACTIVATE_SERVER if the sensor server cannot be started
 */
 SMI_API SMI_RESULT SmiAccelerometerRegisterHandler(UINT period, SmiAccelerometerHandler handler);

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明