タグ

DLLに関するodawaraのブックマーク (14)

  • VC++「バージョン取得方法」メモ(Hishidama's VC++Memo "version")

    //dllファイルやexeファイル内のリソースのバージョン情報を表示する BOOL PrintFileVersion(char* path) { #pragma comment(lib, "version.lib") DWORD dwZero = 0; DWORD dwVerInfoSize = GetFileVersionInfoSize(path, &dwZero); if(dwVerInfoSize == 0) { printError("GetFileVersionInfoSize", GetLastError()); return FALSE; } unsigned char *pBlock; pBlock = new unsigned char[dwVerInfoSize]; if(pBlock == NULL) return FALSE; GetFileVersionInfo

    odawara
    odawara 2009/06/22
  • 【インフォシーク】Infoseek : 楽天が運営するポータルサイト

    日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。

  • C++ のシンボルをデマングルする - bkブログ

    C++ のシンボルをデマングルする C++ コンパイラはシンボルが一意の名前を持つように名前マングル (name mangling) と呼ばれる処理を行います。記事では GNU の開発環境で C++ のシンボルをデマングル (demangle) する方法を紹介します。 マングルの方法はコンパイラ依存です。同じコンパイラでもバージョンによってマングルの方法が異なることがあります。たとえば GCC 3.x では int foo(int) を _Z3fooi に、 int foo(const char*) を _Z3fooPKc のようにマングルしますが、 GCC 2.95 ではそれぞれ foo__FPCc, foo__Fi となります。 コマンドラインからデマングル C++ のオブジェクトファイルに nm をかけると、デフォルトではマングルされた読みづらい形式でシンボルが出力されます。 %

  • 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
  • @IT:.NET TIPS Win32 APIやDLL関数を呼び出すには? - C#

  • 連載:C#入門 第20回 実行時に参照可能な属性(4/5) - @IT

    廃止予定を事前に告げるObsolete属性 C#言語仕様書では、Conditional属性、AttributeUsage属性と並んで、もう1つ「Obsolete」という名前の属性が標準で予約されている。これは、古くなって廃止予定の機能に付加するもので、将来なくなるので使わない方がよいと告げるために使用される。プログラムを開発中に、互換性のためにやむを得ず残しているものの、もう新規には使ってほしくない機能というものが生じることがある。そのような状況に対してエレガントに対処するために積極的に使用するとよいだろう。以下はObsolete属性を使用した例である。 1: using System; 2: 3: namespace ConsoleApplication21 4: { 5:   [Obsolete("Sample1は今後サポートされません。Sample2を使ってください。")] 6:  

  • DLL 呼び出し

    プラットフォーム呼び出しサービス .NET プラットフォームは、一つのシステムとして完成しています その仕組みは、GUI や ネットワーク環境など、システムとして独立できる能力があり .NET 標準クラスライブラリを使えば、GUI アプリケーションを作成することも簡単です しかし、.NET はネイティブプラットフォームの機能を呼び出す手段も提供しています Win32 API プログラマは、独自の DLL を C/C++ で作成する能力があるでしょう .NET からプラットフォームを呼び出すことができれば、便利なのは間違いありません ただし、システムを呼び出した場合 .NET アプリケーションはそのシステムに依存してしまいます DLL を呼び出すことができれば、事実上 Windows の全ての機能を引き出すことができます しかし、.NET の思想は OS を抽象化することであることを忘れては

    odawara
    odawara 2008/07/02
  • アセンブリ内のすべての型を取得する

    アセンブリ内のすべての型を取得するまず、Assemblyオブジェクトを取得する基的な方法について説明します。アセンブリのファイル名を指定してアセンブリを読み込むには、Assembly.LoadFromメソッドを使用します。アセンブリの完全限定名によりアセンブリを読み込むには、Assembly.Loadメソッドを使用します(アセンブリの完全限定名およびその取得方法については、ヘルプの「アセンブリ名」をご覧ください)。さらに、現在のコードを実行しているアセンブリはAssembly.GetExecutingAssemblyメソッドで、アプリケーションドメインに読み込まれているすべてのアセンブリはAppDomain.GetAssembliesメソッドで取得することができます。 次にこれらを使ってAssemblyオブジェクトを取得する例を示します。 'Imports System.Reflecti

    アセンブリ内のすべての型を取得する
  • http://www.ne.jp/asahi/yamashita/programming/dot_net/dll.html

    C#からdll呼び出し win32API呼び出し using System; using System.Runtime.InteropServices; class Win32 { [DllImport("USER32.DLL")] public static extern int MessageBeep( uint uType ); } class Test { public static void Main() { Win32.MessageBeep(1); } } 自作dll呼び出し using System; using System.Runtime.InteropServices; class Dll { [DllImport("test.dll")] public static extern int add( int i1,int i2); } class Test

  • 1