C#におけるDllImportの使い方の紹介
4069 ワード
DllImportの説明
DllImportはSystemです.Runtime.InteropServicesネーミングスペースの下にある属性クラスであるため、ASP.NETでDllImportを使用する場合は、先に「using System.Runtime.InteropServices;」が必要です.この機能は、管理されていないDLLから導出された関数の呼び出しに必要な情報を提供することである.DllImportプロパティはメソッドに適用され、エントリポイントを含むdllの名前を最小限に抑える必要があります.
DllImportプロパティ定義
namespace System.Runtime.InteropServices
{
[AttributeUsage(AttributeTargets.Method)]
public class DllImportAttribute: System.Attribute
{
public DllImportAttribute(string dllName){...} // dllName
public CallingConvention CallingConvention; //
public CharSet CharSet; //
public string EntryPoint; //
public bool ExactSpelling; // , false
public bool PreserveSig; //
public bool SetLastError; //FindLastError
public string Value {get {...}}
}
}
説明:1、DllImportはメソッド宣言にのみ配置できます.2、DllImportには単一の位置決めパラメータがあります.インポートされたメソッドのdll名を含むdllNameパラメータを指定します.3、DllImportには5つの命名パラメータがあります.DllImportパスの問題
DllImportでは、1、exeが存在するディレクトリ2、System 32ディレクトリ3、環境変数ディレクトリを順番に自動的に探しますので、参照したDLLをこの3つのディレクトリにコピーするだけでパスを書かなくてもいいです.Webの中の、同時にアプリケーションの中の後で発見して
[DllImport(@"C:\OJ\Bin\Judge.dll")]
でこのようにDLLの絶対的な経路を指定して正常にマウントすることができます.この問題はサードパーティ製の非管理DLLコンポーネントを使用するときに最もよく発生します.私のも同じようにこの時に発生した問題です.Asp.Net Teamの公式ソリューションは、まず、どのコンポーネントを参照しているのか、管理されているのか、管理されていないのかを確認する必要があります.管理が容易で、直接使用する必要がある場合は引用し、間接使用する必要がある場合はbinディレクトリにコピーする.管理されていない処理は面倒です.実際、binにコピーしても何の役にも立たない.CLRは一時ディレクトリにファイルをコピーし、そこでwebを実行し、CLRは管理ファイルだけをコピーするからだ.これは、管理されていないdllをbinの下に置いたのにモジュールをロードできないことを示しているからだ.具体的には、まず、C:DLLの場合、サーバ上で任意の場所を探してディレクトリを新規作成します.次に、環境変数でPath変数にこのディレクトリを追加します.最後に、すべての非管理ファイルをC:DLLにコピーするか、よりいっそDLLをsystem 32ディレクトリに配置します.自分で導入できるアプリケーションでは、このような未払いは解決策ではありませんが、仮想空間を使用している場合は、PATH変数を登録したり、自分のDLLをsystem 32ディレクトリにコピーしたりすることはできません.同時に、私たちのDllの物理的な経路を知っているとは限らない.DllImportでは、サーバではなく文字列定数しか使用できません.物理パスは、MapPath(@"~/Bin/Judge.dll")によって決定される.