Archive for the ‘C++’ Category

ライブラリのリンクについて

火曜日, 10月 19th, 2004

 あるソフトウェアを前の会社の先輩方と作ってます。趣味みたいな感じで。私はC++を仕事でやったこと無いので、足を引っ張りまくりです。私が雛型を作った、わかりにくいプロジェクト(先輩いわく、パッと見、C++だけど、中身はC言語)を先輩がまとめてくださったんですが、複雑になって返ってきました(私には複雑にみえるだけ)。特に外部ライブラリに付いて質問したところ、昨日、先輩がメールで詳細に教えてくださったので、忘れないようにメモっておく。というか、まる写し。

LIB形式でのリンクは、静的リンク(スタティックリンク)といって
ビルド時に、必要なモジュールを全てリンクするので、EXEのみで実行可能となりますので、使いやすい方法です。当然、LIBファイルを変更すると、EXEも再ビルドする必要がありますし、ファイルサイズ、使用メモリサイズが増加します。
 一方、DLL形式でのリンクは、動的リンク(ダイナミックリンク)といい、こちらは実行時に必要なモジュールをロードするので、EXE以外にDLLファイルが必要となります。反面、EXEとDLLは独立しているので、I/Fさえ同じであれば、DLLを変更した際は、DLLを入れ替えるだけでよく、EXEのファイルサイズ、使用メモリサイズは少ないことになります。

ということ。 去年はDLLを作らされたけど、いまさらその利点がわかった気がします。



Video for Windows

木曜日, 10月 14th, 2004

USBカメラなんかで、キャプチャする方法。Video for Windows というマクロを使用します。

  • まずはライブラリにリンクさせる
  • #include <vfw.h>
    #pragma comment(lib,"vfw32.lib")
  • キャプチャーウィンドウをつくる
  • // キャプチャウインドを作成する
    //失敗するとNULLが返る。成功するとキャプチャハンドルが返る。
    ghWndCap = capCreateCaptureWindow(
    	(LPTSTR) TEXT(""),// タイトルバー用の文字列
    	WS_CHILD | WS_VISIBLE,	// ウィンドウスタイル
    	225, 70, 500, 600,		// 左上の座標・横幅×高さ
    	(HWND) hWnd, 		// 親ウインドのハンドル
    	(int)0 );			// ウインドウ識別子
    
    capDriverConnect( hWndCap, 0 ); //	接続
    
    // デフォルトでプレビューを開始する
    capPreviewRate(ghWndCap, MS_FOR_15FPS) ;
    capPreview(ghWndCap, TRUE) ;

    これで何とかダイアログにキャプチャウインドウがでた。
    今回使ったカメラはI/O DATAのUSBCAM 30V です。

    参考リンク

  • Concept!のVideo Capture項
  • 。少なくとも私が持ってるMSDNのVideo for Windowsの項は日本語でないので、ここの日本語訳はものすごくたすかりました。



    商売の為のヘッダファイル (*.h)

    火曜日, 10月 5th, 2004

     Java 言語からシステム開発の仕事を始めた私は、一般的な情報処理技術者が基とするC言語の知識に乏しい。ので、このブログの「C++」というカテゴリには初歩の初歩、みたいなことが書かれる。
     C++であるクラスを作った。ヘッダファイル (*.h) というファイルにライブラリのリンクとか変数の初期化とかを書けるらしいと気づき、とりあえずフィールド変数の初期化と include とかを記述。しかし、なんで、ヘッダファイルと本体のファイルに分けたりするのだろうか?と疑問に思っていた。
     ある日、一緒に仕事をしていたカリスマSE、(私の中で一生かけても追いつけそうにない人)Sさんにその事を聞いてみた。こんな質問をしても馬鹿にしないで答えてくれるSさんの、そんなところが尊敬できる。

    例えば、あるライブラリのソースを非公開にして高い値段で配布する。このとき、ライブラリの中身は、見えないから、そのライブラリに付随するヘッダファイルを本体にincludeしてライブラリ内の変数や関数を使う。ヘッダファイルはそんな商売の為のファイルだ。M****Softが絡むと、Javaみたいになんでもかんでもオープンソースではないのだよ。

    というような事を教えてくれた。(もっと丁寧な口調です。)
    なるほど。