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と申します
元の「ファイルを圧縮する-LZH編 (必須Unlha32.dll)」では
PUnlha Unlha=NULL;
と
Unlha = (PUnlha)GetProcAddress(hUnlha, "Unlha");
のPUnlhaをFARPROCに変えるとそのエラーが出現しなくなります。
このデバッグエラーメッセージは,主に呼び出すときの規約と関数の実際の規約が異なるときに出現します。
> typedef int (*PUnlha)(const HWND hwnd, LPCSTR szCmdLine,LPSTR szOutput, const DWORD dwSize);
この行に間違いがあって,
typedef int (WINAPI *PUnlha)(const HWND, LPCSTR, LPSTR, const DWORD);
が正しいです。
#constは本来不要だと思いますけどね……。
ツイート | ![]() |