1

我正在使用 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 都很陌生。

提前致谢

4

2 回答 2

2

两个问题!!

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

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

所以你的电话应该更像

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

于 2012-08-22T09:10:49.547 回答
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 是 CR。您必须将字符串更改为“\SRV\RFIDReader.dll”。

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

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

问候

约瑟夫

于 2012-08-23T03:38:14.453 回答