dポイントプレゼントキャンペーン実施中!

同じ引数、戻り値のdllが名前違いで100個あります。
これらをテストするツールを作成しています。
[DllImport("user32.dll")]
のdllの部分を可変にすることは可能なのでしょうか?

A 回答 (1件)

記法と内容の都合から,


・C# 2.0以上
・.NET Framework 2.0以上または.NET Compact Framework 2.0以上
を前提にします。

まず,属性の引数を実行時に変更する事はできないです。
そのため,DllImportAttributeでなんとかする,という方向性で解決する事は出来ません。
ただ,幸い引数と戻り値が同じ (呼び出し規約も同じ?) なので,Win32 APIとの組み合わせで処理できます。

1. LoadLibrary API,GetProcAddress API,FreeLibrary APIをDllImport属性付きで宣言する。
MSDN: LoadLibrary Function (Windows)
http://msdn.microsoft.com/en-us/library/ms684175 …
MSDN: GetProcAddress Function (Windows)
http://msdn.microsoft.com/en-us/library/ms683212 …
MSDN: FreeLibrary Function (Windows)
http://msdn.microsoft.com/en-us/library/ms683152 …
2. メソッドの型のデリゲートを用意する
3. LoadLibraryでDLLを読み込む
4. GetProcAddressで対象となる関数へのポインタを取得する
5. Marshal.GetDelegateForFunctionPointerで関数ポインタをデリゲートに変換する
MSDN: Marshal.GetDelegateForFunctionPointer メソッド (System.Runtime.InteropServices)
http://msdn.microsoft.com/ja-jp/library/system.r …
6. デリゲートを呼び出す
7. FreeLibraryでDLLを解放する

この回答への補足

ありがとうございます。
開発環境を書き忘れていました。
呼び元はC#2008で呼ばれるのはC(VC6.0でコンパイル)の
プログラムです。 

補足日時:2009/08/30 21:41
    • good
    • 0
この回答へのお礼

それぞれの項目で出てくる単語が未知のものすぎて
何を書いたらいいのかさっぱりわかりません。
調べたら教えて頂いた内容が出てくるので
できそうな気配はします。
勉強してみます。

お礼日時:2009/08/31 10:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!