タグ

2012年4月18日のブックマーク (4件)

  • へろぱ的ブログ: C#でDLLを動的に呼び出すサンプル

    Windows APIをLoadLibrary, GetProcAddressを使用して動的に呼びたい時がありますよね。 例えば、共通アーカイバプロジェクトのDLLの機能を設定ファイルなどにより、機能追加したい場合とかそう思うのではないでしょうか? C#なプログラムでは、Visual Basic 6などの時のように、事前にDllImportやらで宣言してやらないといけないのかと思っていましたが、実は以下のようにして動的に呼べるようです。 using System; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication1 {     class Program     {         [DllImport("kernel32.dll", EntryPoint = "L

  • ネイティブDLLを遅延バインディング(動的P/Invoke) - うぃずのひとりごと

    VB6.0時代に、どうしてもできないことがあった。それは、ネイティブDLLの遅延バインディング。 VBにはAPIを呼ぶためのDeclare宣言があったけど、呼び出すDLLはコーディングの段階で固定されてしまう。つまり、ビルドが完了した時点で、呼び出すDLLが決まってしまうということ。当然、アプリケーションを動かしている中で変更することはできない。一般に「動的な呼び出し」が出来ないのである。 .NET 2.0になって、ようやくその枷(かせ)が外れたのだけど、どのサンプルを見ても、LoadLibraryやらFreeLibraryやら、いろいろと準備と後始末に忙しい。 そこで、.NETによるネイティブDLLの遅延バインディングはどこまで簡略化できるのか。 試してみた。 C#のコンソールアプリケーションで、事前バインディングしていないWinAPIのMessageBox関数を呼び出す。以下がそのコー

  • DOBON.NET .NET Tips - 遅延バインディングによりアンマネージDLL関数を呼び出す

    遅延バインディングによりアンマネージDLL関数を呼び出す 統合アーカイバ仕様DLLを使ってファイルを圧縮、展開(解凍)するUnlha32.dllを使って書庫を展開する方法DllImportによるアンマネージDLL関数の呼び出し書庫を展開する遅延バインディングの意義遅延バインディングによる方法ついに完成!この記事への評価、コメント 遅延バインディングによりアンマネージDLL関数を呼び出す 統合アーカイバ仕様DLLを使ってファイルを圧縮、展開(解凍)するここでは.NETで外部のDLLの関数(アンマネージDLL関数)を呼び出す方法を考えます。しかもここでの最終目標は遅延バインディングによる方法です。その具体例として、MiccoさんのUNLHA32.DLLを使って書庫を展開(解凍)するコードを書いてみることにします。最終的には「統合アーカイバプロジェクト」に対応したあらゆるDLLを使って書庫を展開

    DOBON.NET .NET Tips - 遅延バインディングによりアンマネージDLL関数を呼び出す
  • DLL呼び出しとマーシャリング - とあるぷろぐらまーのぶろぐ

    http://www.microsoft.com/japan/msdn/net/compactframework/netcfintrointerp.aspx http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpcondefaultmarshalingforvaluetypes.asp Felicaドライバを呼び出しIDを読み取る.NETプログラム VC++プログラムを以前作成したのだが、事前バインディングを使っていたため、Felica.dllがないと当然、EXE自体起動しない。 これを解決するため、遅延バインディングを使うやり方に変えたのだが、マネージドコードとアンマネージドコード間のマーシャリングの深い世界にどっぷりと嵌まった。 (今回、C#.NETにするのと正確には遅延ロードに変

    DLL呼び出しとマーシャリング - とあるぷろぐらまーのぶろぐ