为VC ++智能设备应用程序发出加载DLL的问题

时间:2012-08-22 08:51:46

标签: visual-studio-2008 visual-c++ windows-mobile-6

我正在使用VC ++ win32控制台应用程序创建一个简单项目,并尝试使用函数“LoadLibrary(”D:\ SRV \ RFIDReader.dll“)加载dll文件;”我可以通过这种方式加载它。但是当我尝试在智能设备应用程序中执行相同的操作时,它会在编译时给出错误。错误说:“错误C2664:'LoadLibraryW':无法将参数1从'const char [22]'转换为'LPCWSTR'”。

我已经尝试过的解决方案如下: 1.在字符串(dll的路径)之前使用“L”或“_T”或“TEXT”时,它会编译,但在运行应用程序时,LoadLibrary返回NULL。 2.将属性中的字符集更改为“使用多字节字符集”也没有帮助。

我正在使用Visual Studio 2008和Windows Mobile SDK 6.0。关于这个问题的任何想法?我对VC ++和Windows Mobile都很陌生。

提前致谢

2 个答案:

答案 0 :(得分:2)

两个问题!!

1)所有Windows CE / Windows Mobile API都是Unicode。因此,您需要为Unicode编译应用程序,并且需要在_T()宏中包装字符串常量。 (L可能显式_T()前缀更强大。)

2)Windows CE / Windows Mobile设备没有驱动器号,因此您的路径不正确。

所以你的电话应该更像是

LoadLibrary(_T("\SRV\RFIDReader.dll"));

答案 1 :(得分:0)

这是真正的“windows ce”设备还是“Windows Mobile”?我问,因为你使用cout,它不会在Windows Mobile设备上输出任何内容。

所有Windows CE和Mobile都是UNICODE(也称为WideCharString,WCS,每个字符都保存为内存中的两个字节)。

请从头开始一个新项目,并在新项目向导中使用C / C ++ - SmartDevice。

#include <iostream> 
#include <windows.h> 
#include <stdio.h> 
#include <tchar.h> 
using namespace std;
 HINSTANCE hDLL_platform;
 HINSTANCE hDLL_stack;

 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
    DWORD err;
     hDLL_stack = LoadLibrary(_T("**\\SRV\\RFIDReader.dll**"));
     if (hDLL_stack != NULL) { 
        cout<<"done"<<endl;
    } else { 
        err = GetLastError();
         cout<<"failed\n"<<endl;
     } 
    FreeLibrary(hDLL_stack);
    return (1);
 }

字符串中的单个\是转义开始字符。例如\ n是换行符,\ r \ n是CR。您必须将字符串更改为“\ SRV \ RFIDReader.dll”。

DLL是否真的在设备上本地可用\ SRV?

只需使用众所周知的DLL检查您的代码,例如“\ Windows \ coredll.dll”。

问候

约瑟夫