スポンサーサイト
2015.06.20 Saturday

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | - | - | pookmark |
zlib使ってみた2
2011.12.08 Thursday

前回の続きの「zlib使ってみた」です。

3.いろいろ書いてみる
ではテストとしてプログラムを書いてみます。
丁度zlib.netのほうにサンプルプログラムがあったのでそれをコピペして書いてみることにします。
http://zlib.net/zpipe.c



コンパーーーーーィル!
C:¥>make
gcc -Iinclude -Llib main.c -lz

実ーーーーーーー行!
C:¥>a.exe

ごーん!



・・・・・・、
どうやら zlib1.dll というzlib用のDLLが必要なようです。
探しているとzlib.netからコンパイル済みDLLが貰えるようなので、ダウンロードしてみます。
http://www.zlib.net/


「The current release is publicly available here:」
「zlib compiled DLL」からDLLをもらってきました。


これで「a.exe」と入力すると…。
おおおおおお、実行できました!
なかなかすごいですねぇ。



4.実際に使う
zlibはGZip形式のファイルを扱うためのライブラリです。
ですからファイルを圧縮したり解凍したりできるわけです。

ココからは実際にzlibを使ってみましょう!

まずは関数の説明です。
普通にstdio.hで宣言されているファイル関連の関数は、
  ・ファイルポインタは「FILE*」型
  ・ファイルオープンはfopen関数
  ・ファイルクローズはfclose関数
    :
    :
など、簡単に扱うことができますよね。

で、zlibはなんとGZip形式のファイルをそのまんまfopen()する感覚で扱うことができる最強ライブラリです。

まずファイルポインタは「gzFile」型になります。
ですから「FILE *fp;」と書いていたところはzlibを使うと「gzFile fp;」になります。

また、fopen関数は「gzopen関数」になります。
fwrite関数は「gzwrite関数」、fclose関数は「gzclose関数」など普通の標準ライブラリとほとんど変わりません。

#include <zlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
    char *s = "The quick brown fox jumps over the lazy dog.";
    gzFile fp;
    if ((fp = gzopen("out.gz", "wb9")) == NULL) {
        puts("あぬーん");
    }
    gzwrite(fp, s, strlen(s));
    printf("%dバイト出力しました。¥n", strlen(s));
    gzclose(fp);
    return 0;
}

ちなみに「あぬーん」はmoge32がよく使うエラー時の表現です。
普通に標準ライブラリに使えて簡単ですねぇ。


ではmakeでGo!

C:¥>a.exe
44バイト出力しました。

作成されたout.gzのサイズを見てみると・・・。
-------------------------------------
種類: GZ ファイル
サイズ: 63 バイト
更新日時: 2011/12/08 20:16
-------------------------------------

むむう。
13バイト→63バイトと増えてしまいました。
あんまりサイズが小さすぎると圧縮ファイルのデータの分などもあるので増えてしまうことがあるんですね〜。

じゃあもうちょっとでかいものでやってみますか。

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.



「Lorem ipsum」という例文です。
Wikipediaからもってきました。

コレに書き換えて実行!

・・・やりました!446バイトから282バイトになりました!圧縮成功です!


満足したところで今回はおしまいです。
では〜。

| moge32 | ライブラリ使ってみた | comments(0) | - | pookmark |
zlib使ってみた
2011.12.03 Saturday

今回もライブラリ使ってみたシリーズです。

今回はこれまた有名なライブラリ、「zlib」を使ってみます。

zlibでは主に「gzip」形式のファイルを圧縮・解凍したりすることができます。


1.ライブラリファイルの入手
今回もMinGWを使用します。
まずはSourceForge.netのGnuWinから zlib の Windows版ライブラリファイル をもらってきます。

http://sourceforge.net/projects/gnuwin32/files/zlib/

2011年12月3日現在では最新バージョンが1.2.3だったので、今回はバージョン1.2.3を頂きます。
1.2.3」→「zlib-1.2.3-lib.zip」と行き、ダウンロードしたファイルを解凍します。


2.コンパイルを通してみる
解凍したフォルダに「include」「lib」「manifest」という3つのフォルダがあると思うので、このうち
include」と「lib」をソースファイルのあるフォルダにコピーしておきます。


ではMakefileを書いていきます。お粗末です。

default:
 gcc -Iinclude -Llib main.c -lz

ふむ、なかなか短いですな。

これで make。おお、コンパイル通ったぞ!

今回はこんなところで終わりにしておきましょう。
次回では実際に使って遊んでみましょう!

次へ

| moge32 | ライブラリ使ってみた | comments(0) | - | pookmark |
DxLib使ってみた。
2011.12.02 Friday

唐突ですが今回から「○○ライブラリ使ってみた」シリーズをはじめようと思います。

今回はかなり有名な「DXライブラリ」MinGWでつかってみようと思います。

Visual C++を使っている方は他のサイトを参考にしてくださいね。






1.ライブラリファイルの入手

まずはDXライブラリ本体を入手します。
http://homepage2.nifty.com/natupaji/DxLib/

ここの「DXライブラリのダウンロード」から「DXライブラリ GnuC++版」というのをダウンロードし、解凍します。


ダウンロードしたファイルを実行して解凍すると、デスクトップにこのような内容のフォルダができていると思います。









2.ちょっとやってみる

で、この作成されたファイルの中にある
            「プロジェクトに追加すべきファイル_GCC(MinGW)用」
というフォルダの中身を、DxLibを使いたいC言語ファイルのあるフォルダに「dxlib」フォルダを作成し、その中に入れておくことにします。



次にMakefileとソースを書いてみます。(とってもお粗末だけど気にしたら負け。)

[Makefile]

default:
    g++ -Idxlib -Ldxlib main.c ¥
        -lDxLib ¥
        -lDxUseCLib ¥
        -ljpeg ¥
        -lpng ¥
        -lzlib ¥
        -ltheora_static ¥
        -lvorbis_static ¥
        -lvorbisfile_static ¥
        -logg_static ¥
        -lbulletdynamics ¥
        -lbulletcollision ¥
        -lbulletmath ¥
        -mwindows

[main.c]
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  ChangeWindowMode(TRUE);
  if (DxLib_Init() == -1) return 1;
  WaitKey();
  DxLib_End();
  return 0;
}


これで make してみます。

In file included from dxlib/DxLib.h:52:0,
                 from main.c:1:
dxlib/DxDirectX.h:5437:2: 警告: 'novtable' 属性指示が無視されました [-Wattributes]
dxlib/DxDirectX.h:5580:2: 警告: 'novtable' 属性指示が無視されました [-Wattributes]
dxlib/DxDirectX.h:5658:2: 警告: 'novtable' 属性指示が無視されました [-Wattributes]
dxlib/DxDirectX.h:5787:2: 警告: 'novtable' 属性指示が無視されました [-Wattributes]
dxlib/DxDirectX.h:5870:2: 警告: 'novtable' 属性指示が無視されました [-Wattributes]
dxlib/DxDirectX.h:6378:2: 警告: 'novtable' 属性指示が無視されました [-Wattributes]
dxlib/DxDirectX.h:6553:2: 警告: 'novtable' 属性指示が無視されました [-Wattributes]
dxlib/DxDirectX.h:6898:2: 警告: 'novtable' 属性指示が無視されました [-Wattributes]

なんだか警告が出てしまいましたねぇ。
ファイル名を見ると、DxLib のヘッダファイルのせいで警告が出ているようです。

というわけでdxlib/DxDirectX.hの5437行目を見てみます

 class
#ifndef DX_GCC_COMPILE
    __declspec( novtable )
#endif
     D_CUnknown : public D_INonDelegatingUnknown, public D_CBaseObject

DX_GCC_COMPILE」が定義されていないため、GCCでのコンパイルでは不要な「__declspec( novtable )」というものが入ってしまい、警告が出てしまっているわけです。
宣言されていないなら、「DX_GCC_COMPILE」を宣言すればいいじゃない。(マリーアントワネット調)


[main.c]
#define DX_GCC_COMPILE        // 追加
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  ChangeWindowMode(TRUE);
  if (DxLib_Init() == -1) return 1;
  WaitKey();
  DxLib_End();
  return 0;
}

修正したら make してみます。

できたーっ!!!

(クリックで拡大)




というわけで今回は無事に終わりました。
次回は何にしようかなぁ。


要望・感想などがございましたらコメント欄までどうぞ。
| moge32 | ライブラリ使ってみた | comments(0) | - | pookmark |
←back 1/1 pages next→
Search
Profile
Category
Archive
Latest Entry
Recent Comment
  • 昔のパソコン MSX ・・・
    moge32 (07/27)
  • 昔のパソコン MSX ・・・
    go15 (07/25)
  • INT 0x18 - ROMBASIC起動!?
    moge32 (05/27)
  • INT 0x18 - ROMBASIC起動!?
    mikerosss (05/23)
  • Vistaアクセサリを7で動かすとどうなるだろうか。
    moge32 (04/16)
  • Vistaアクセサリを7で動かすとどうなるだろうか。
    x (04/16)
  • Vistaアクセサリを7で動かすとどうなるだろうか。
    moge32 (03/29)
  • Vistaアクセサリを7で動かすとどうなるだろうか。
    25 (03/28)
  • 日本人は恥ずかしくて使えない壁紙
    moge32 (03/27)
  • 日本人は恥ずかしくて使えない壁紙
    25 (03/26)
Links
Admin
Calendar
    123
45678910
11121314151617
18192021222324
25262728293031
<< December 2011 >>
イケ麺時計
グリムス
MOGESYSTEMのPixiv
釣りみくじ

コリント占い
Sponsored links
Mobile
qrcode
無料ブログ作成サービス JUGEM