現在VC++で「16ビットDLLから32ビットDLLをコール」をしようと思って
調べていましたが、このご質問に頼るしか方法がなく、困っています。
状況
 VB4.0(16bit)・・・16bit版でEXEを作成
 VC++1.51・・・・・16bitDLLを作成
 VC++4.0/6.0・・・・32bitDLLを作成

 VB4.0(16bit)のEXEから、16bit版のDLLをコールし処理を行いたいの
 ですが、16bit版DLLで扱えないVC++の関数(プロセス関数:spawn??())
 を利用しなければならず、16bit版DLLの機能を32bit版DLLで作成し、
 16bit版DLLから32bit版DLLを呼び出そうと思っております。

誰か助けて! 是非、皆様のお知恵を拝借致したく思います。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1akinori_sです。


microsoftにサンプルがあったので参考にしてみて下さい。

参考URL:http://www.microsoft.com/japan/support/kb/articl …
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。たいへん参考になりました。
現在、いろいろ調べています。なんとかなりそうな気がします。
ありがとう御座いました。

お礼日時:2002/02/25 11:49

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
を呼べばいいと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。参考にしていろいろ試してみます。
ちなみに、CallProc()の関数がどこを探しても見つかりませんが、
もし、よろしければお教え下されば幸いと思っております。
以上

お礼日時:2002/02/20 22:04

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報