- ベストアンサー
16ビットDLLから32ビットDLLをコールする方法
- VC++を使用して16ビットDLLから32ビットDLLを呼び出す方法について調査しています。
- VB4.0(16bit)のEXEから、16bit版のDLLをコールし処理を行いたいが、16bit版DLLで扱えないVC++の関数を利用する必要があります。
- そのため、16bit版DLLの機能を32bit版DLLで作成し、16bit版DLLから32bit版DLLを呼び出す方法を探しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1akinori_sです。 microsoftにサンプルがあったので参考にしてみて下さい。
その他の回答 (1)
- akinori_s
- ベストアンサー率60% (21/35)
32bit版から16bit版を呼ぶのはサンクを使用して実行した事は あったけど、逆は試した事が無いのでちょっと自信ないです。 多分ですが、試してみて下さい。 使用する関数は LoadLibraryEx32W (32版DLLをロードする) FreeLibrary32W (32版DLLを開放する) GetProcAddress32W (32版DLLの関数ポインタを取得) CallProc32W (32版DLLの関数をCALLする) です。 まず16bit版DLLですがDEFファイルに IMPORTS kernel.LoadLibraryEx32W kernel.FreeLibrary32W kernel.GetProcAddress32W kernel.CallProc32W を書いておきます。 で16bit版DLLのソースファイルで extern "C" DWORD FAR PASCAL LoadLibraryEx32W(LPCSTR lpszLibFile, DWORD hFile, DWORD dwFlags); extern "C" DWORD FAR PASCAL GetProcAddress32W(DWORD hModule, LPCSTR lpszProc); extern "C" DWORD FAR PASCAL FreeLibrary32W(DWORD hLibModule); extern "C" DWORD FAR PASCAL CallProc32W( DWORD, DWORD, DWORD, DWORD, DWORD, LPVOID, DWORD, DWORD); 上記の宣言を行っておいて、後は実際に関数内で上記の関数を使用して32bit版DLL を呼べばいいと思います。
お礼
ご回答ありがとうございます。参考にしていろいろ試してみます。 ちなみに、CallProc()の関数がどこを探しても見つかりませんが、 もし、よろしければお教え下されば幸いと思っております。 以上
お礼
お礼が遅くなりました。たいへん参考になりました。 現在、いろいろ調べています。なんとかなりそうな気がします。 ありがとう御座いました。