1

VC++ win32 コンソール アプリケーションで単純なプロジェクトを作成し、関数「LoadLibrary("D:\SRV\RFIDReader.dll");」を使用して dll ファイルをロードしようとしています。この方法でロードできます。しかし、スマート デバイス アプリケーションで同じことをしようとすると、コンパイル中にエラーが発生します。エラーは、「エラー C2664: 'LoadLibraryW' : パラメーター 1 を 'const char [22]' から 'LPCWSTR' に変換できません」と表示されます。

私がすでに試した解決策は次のとおりです。2.プロパティの文字セットを「マルチバイト文字セットを使用する」に変更しても効果がありませんでした。

Visual Studio 2008 と Windows Mobile SDK 6.0 を使用しています。この問題に関するアイデアはありますか?私は VC++ と Windows Mobile の両方にまったく慣れていません。

前もって感謝します

4

2 に答える 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

これは本当の「Windowsce」デバイスですか、それとも「WindowsMo​​bile」ですか。WindowsMo​​bileデバイスの画面に何も出力しないcoutを使用しているので質問しました。

すべてのWindowsCEおよびモバイルはUNICODEです(WideCharString、WCSとも呼ばれ、すべての文字は2バイトとしてメモリに保存されます)。

新しいプロジェクトを最初から開始し、新しいプロジェクトウィザードで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のデバイスでローカルに利用できますか?

「\Windows\coredll.dll」などのよく知られたDLLを使用してコードを確認するだけです。

よろしく

ジョセフ

于 2012-08-23T03:38:14.453 に答える