「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 で元に戻す必要があります。ですので、どなたかご存知でしたら教えてください。
ありがとう。