1

「UNICODE」文字を含むパスにある「dll」ファイルをアプリケーションにロードする必要があります。wchar_t* でパスを取得し、それを LoadLibrary() に渡すと、期待どおりに動作します。

しかし、私は別の方法で 1. ワイド char の配列を UTF-8 マルチバイト配列に変換します。2. UTF-8 マルチバイト配列をワイド文字配列に再度変換します。3. 変換されたワイド char 配列をライブラリのパスとして使用します。LoadLibrary() が失敗し、GetLastError() が 216 ( Module not found error ) を返しています。

最初の入力が2番目のステップの出力になると考えて上記の手順を試しましたが、そうではありません... :-(

これが私がやろうとしていることに関するコードの詳細です...

wchar_t* path = L".\\..\\libs\\여성해방운동\\mylib.dll";

//STEP 1:
int creq = WideCharToMultiByte(CP_UTF8,0,path,-1,NULL,0,NULL,NULL);
char* cpath = (char*)malloc(sizeof(char)*creq);
memset(cpath,0,creq);
WideCharToMultiByte(CP_UTF8,0,path,-1,cpath,creq,NULL,NULL);

//STEP:2
int wreq = MultiByteToWideChar(CP_ACP,0,cpath,-1,NULL,0);
wchar_t* wpath = (wchar_t*)malloc(sizeof(wchar_t)*wreq);
memset(wpath,0,sizeof(wchar_t)*wreq);
MultiByteToWideChar(CP_ACP,0,cpath,-1,wpath,wreq);

//STEP:3
if( LoadLibrary(wpath) == NULL )
    printf("Loading failed %d \n",GetLastError());
else
    printf("Loading is success \n");

「LoadLibraryA」APIを使用してライブラリをロードするためにcpath(STEP 1の出力)を使用しようとしましたが、これも失敗しました。

私のアプリケーションでは、ワイド char 配列をマルチバイト配列に変換し、別の API で元に戻す必要があります。ですので、どなたかご存知でしたら教えてください。

ありがとう。

4

1 に答える 1

1

ステップ 1 では、CP_UTF8 を使用して変換しました。MultiByteToWideChar()したがって、ステップ 2 では、 CP_UTF8で呼び出す必要もあります。

LoadLibraryA(cpath, ...)cpath が CP_ACP にあると想定しているため、失敗することが予想されます-コンピューターがたまたま設定されているシステムコードページです。

于 2013-01-09T14:54:05.333 に答える