我正在使用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都很陌生。
提前致谢
答案 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”。
问候
约瑟夫