>>73 >Declare Sub gunzip Lib "gunzip" Alias "gunzip" (inbuf As BytePtr, key As Long, out_size As *Long) as *Byte Declare Function gunzip Lib "gunzip" Alias "gunzip" (Text As BytePtr, Size As Long, ByRef DataSize As DWord) as BytePtr '@ Declare Function gunzip Lib "gunzip" Alias "gunzip" (Text As BytePtr, Size As Long, DataSize As DWordPtr) as BytePtr 'A ↑の@かA、どちらかの宣言で動くと思う。 Cの*out_size がどういう扱いになるのかよく分からなかったから2通り書いた。 ABの*と同じ意味なら、Aで動くと思う。
@の呼出方法: Dim Data As BytePtr '展開データ Dim Size As DWord '展開のデータのサイズ Data=gunzip(gzipのデータ,データサイズ,Size) '← MsgBox 0,Data,"展開データ" MsgBox 0,Str$(Size),"サイズ" free(Data)
Aの呼出方法 Dim Data As BytePtr '展開データ Dim Size As DWord '展開のデータのサイズ Data=gunzip(gzipのデータ,データサイズ,VarPtr(Size)) '← MsgBox 0,Data,"展開データ" MsgBox 0,Str$(Size),"サイズ" free(Data)
'解凍処理 Text=gunzip(Data,s,VarPtr(Size)) '解凍 If Text<>0 Then '解答成功したっぽかったら Print "解凍成功" Print "サイズ:";Size 'ファイルに書き出し hFile=CreateFile("test.txt",GENERIC_WRITE,0,ByVal 0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0) WriteFile(hFile,Text,Size,VarPtr(Dummy),ByVal 0) SetEndOfFile(hFile) CloseHandle(hFile) free(Text)'解答されたデータの開放 '↑☆ここでエラーが出ます。 Else Print "解凍失敗" End If free(Data)'gzipデータ開放 End Sub 'ソースここまで
>>634 >というかなんでそんなことしたがるんだよ・・・・・・・ ABでは基本テクなんです。 関数に構造体を渡す時、ABは参照型でしか構造体を渡せない。 つまり、渡された構造体を処理中に関数側で書き換えたら、呼び出し側の構造体の内容まで変わっちゃう。 それを防ぐため、 Function test(Kouzoutai As KOUZOUTAI) As Long Dim K As KOUZOUTAI 'ローカルの構造体定義 'KOUZOUTAIは、架空の構造体です。