Unlha32.dllを正しく使用するには?


たか  2002-02-06 14:05:04  No: 50068  IP: [192.*.*.*]

C言語を使用しファイル圧縮(LZH)をしようと考えています。
  そこで本サイトに掲載されている「ファイルを圧縮する-LZH編 (必須
  Unlha32.dll)」を参考にコーディングしてみたのですが、
  Sample81.cのページ終端から27行目の
  Result=(*Unlha)(NULL,szCmdLine,buffer,1024);の部分で以下の
  ようなメッセージがVisual C++ Debug Libraryより以下のメッセージが
  返却されてしまいます。
  このような経験・またはヒントになるような事項をご存知でしたら
  ご教授ください。
  
  留意事項:圧縮ファイルは作成されていました。
            bufferに格納された返却メッセージも

        Creating archive : D:/xxxxx/xxxxx/20020206132135.lzh
        Frozen   ==>  13% xxxxxxxxxx

  となっており処理は圧縮処理事態は正常に処理されているようです。

  ちなみに当方の開発環境は↓です
  OS:Win2000 Proffesional 
     Visual C++ Ver6.0

*********************************************************************

Debug Error!

Program: E:\Work\Src\YHSSJN02\Debug\YHSSJN02.exe
Module:
File: i386\chkesp.c
Line: 42

The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared with one calling conversion
with a function pointer declared with a different calling conversion.

**********************************************************************

編集 削除
HaruTea  2002-06-15 18:53:53  No: 50069  IP: [192.*.*.*]

はじめまして。HaruTeaと申します

元の「ファイルを圧縮する-LZH編 (必須Unlha32.dll)」では

 PUnlha    Unlha=NULL;



 Unlha = (PUnlha)GetProcAddress(hUnlha, "Unlha");    

のPUnlhaをFARPROCに変えるとそのエラーが出現しなくなります。

編集 削除
YuO  2002-06-17 11:28:48  No: 50070  IP: [192.*.*.*]

このデバッグエラーメッセージは,主に呼び出すときの規約と関数の実際の規約が異なるときに出現します。

> typedef int (*PUnlha)(const HWND hwnd, LPCSTR szCmdLine,LPSTR szOutput, const DWORD dwSize);
この行に間違いがあって,
typedef int (WINAPI *PUnlha)(const HWND, LPCSTR, LPSTR, const DWORD);
が正しいです。
#constは本来不要だと思いますけどね……。

編集 削除