タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

DLLとVCに関するodawaraのブックマーク (6)

  • DLLを作ろう!(関数編)

    今回はDLLを作ってみましょう! いきなり色々作るのも大変なんで、今回は関数をエクスポートしたDLLを作ってみましょう。 関数を作る意味 DLLに関数を作る意味は、なんでしょう? はっきり言って意味はないです。今度説明する「DLLにクラスを作る方法」を使えば、関数を入れるためにDLLを作る必要はなくなるでしょう。 ただ、もちろんクラスとは別に関数をAPIのような形で置きたいという場合もあるでしょう。MFCにもAfxなんたらというような形で、普通の関数があります。そういう関数を起きたい場合には、必要な方法と言えるでしょう。 プロジェクトの作製 まずはプロジェクトから。プロジェクトは「MFC AppWizard (DLL)」を選んでください。DLLは、別にMFCを使わなくても作れますが、たぶん使った方がずっと楽ですので、今回は使うことにします。 プロジェクト名を決めて「OK」ボタンを押したら、

    odawara
    odawara 2009/05/25
  • DLL - Eternal Windows

    EternalWindows Windows開発 / DLL インポートライブラリの役割 --- モジュールのマッピング GetModuleHandle 明示的リンク LoadLibrary GetProcAddress FreeLibrary システムとDLL --- DLLの検索 --- DLL 開発 関数のエクスポート --- DLLの利用 --- DLLとUNICODE --- defファイルの使用 --- DLLのエントリポイント --- 列挙編 モジュールの列挙 (Tool Help) CreateToolhelp32Snapshot Module32First Module32Next モジュールの列挙 (PSAPI) EnumProcessModules GetModuleBaseName GetModuleInformation 関数の列挙 --- 戻る

    odawara
    odawara 2009/05/25
  • エクスポートとインポートとリンク

    DLLはアイテムを共有するためにあります。 そのアイテムは主に関数ですが、 基的にほとんど全てのアイテムを共有できます。 関数、変数、クラス、リソースあたりですね。 このうちリソース以外のアイテムは、 プログラムから利用できるようにするためにエクスポートする必要があります。 エクスポートとは何ぞや?さぁ、分かりません。(ぉぃ 困ったときはMSDNに依存しときましょう。 DLL のレイアウトは .EXE とよく似ていますが、重要な相違点が 1 つあります。DLL ファイルには、エクスポート テーブルが含まれています。エクスポート テーブルには、DLL が別の実行形式に対してエクスポートする各関数の名前が含まれています。これらの関数は、DLL のエントリ ポイントです。エクスポート テーブルに記述されたエクスポート関数のみが、別の実行形式にアクセスできます。DLL 内のその他の関数は、その

    odawara
    odawara 2009/02/23
  • プロセス終了時にメモリを解放すべからず

    http://blogs.msdn.com/oldnewthing/archive/2007/05/03/2383346.aspx よく、OSが解放してくれるから、プロセス終了時にはリソース解放などをしなくてもいいという意見に対して、「いや、できる限りすべきだ」という人が居るが、場合によりけりということらしい。いや、別にしてもいいのだけれど、DLL_PROCESS_DETACHの中でやるなということで。 プロセスが終了するとき、Windows XPがどのような処理をするか。ExitProcessが呼ばれたとき、ExitProcessを読んだスレッド以外のすべてのスレッドは、終了される。スレッドが何をしていようがお構いなしだ。つまりは、TerminateThreadに等しいということだ。MSDNではTerminateThreadは使うべきではないとしつこく警告されているが、一体何がまずいのか

    odawara
    odawara 2009/02/23
  • Iczelion's Win32 Assembly Tutorial 17: Dynamic Link Libraries

    プログラミングの経験が長くなればわかると思うが、たいてい、同じ処理が何回も必要になってくる。 その同じ処理をそのつど書き直していたら非常に無駄なので、 DOS時代のプログラマ達はその共通処理部分をスタティックリンクライブラリ(LIB)に収めていた。 その共通部分の関数が使用したければ、リンクするときにLIBからその関数部分をリンカに抽出してもらい、 作成する実行ファイルに埋め込んでもらう。この方法は「静的リンク」と呼ぶ。 Cのランタイムライブラリが良い例だ。 ただし、この方法の欠点は、全く同じコードがそれぞれの実行ファイルに存在することになるので、 ディスクスペースがもったいないことである。 しかしDOSプログラムでは、(シングルタスクOSなので)メモリ上で動作するプログラムは1つしかないので、 メモリを無駄に使うことはなく、この方法でも全然受け入れられた。 ところがWindowsではマル

    odawara
    odawara 2009/02/23
  • Windowsに土足で乱入?! 〜 フック関数の使い方 : DSAS開発者の部屋

    今日の多くの OS がそうであるように、Windows にも自作のプログラムコードを特定のプロセスへ介入させることのできる「フック」という仕組みがあります。自分自身のプロセスをフックすることもできますが、他のプロセスをフックすることで通常のアプリケーションプログラミングの枠を超えた様々な興味深い処理の実現が可能となります。 ・所定のプロセスに対する Windows メッセージの監視・捕捉 ・所定のプロセスでの特定のイベントに呼応する自作コードの注入 ・既存のアプリケーションの所作を変更 etc. 「自作のコードをあるプロセスに介入させる」とはどういうことでしょう? メモリ上のモジュールイメージにアクセスしてマシン語命令を書き換えて・・という怪しげな方法もありそうですが、Windows では DLL を利用することで比較的容易にこの命題を解決できます。 このことを逆に考えると、自作の DLL

    Windowsに土足で乱入?! 〜 フック関数の使い方 : DSAS開発者の部屋
    odawara
    odawara 2009/02/23
  • 1