2009年2月19日木曜日

いろいろなDLL読み込み方法@C#

Cで書かれたDLL(test.dll)内の以下の関数を呼び出してみましょう。
関数の中身は非常にアレですが、決して気にしないでください(何

bool IsLoli(int num)
{
if (num == 21)
{
return true;
}
return false;
}

では、実際にこの関数をC#で呼び出してみましょう。

方法1.
[DllImport("test.dll", EntryPoint = "IsLoli")
public static extern bool IsLoli(int num);

この方法はかなり一般的なものではないでしょうか。
MSDNのデベロッパーセンターの解説もこんな具合でしたし、ね。

しかし、これでは「関数を呼び出す」動作に比較的長い時間がかかってしまいます。
そこで「SuppressUnmanagedCodeSecurity」を使うのですが、これは「セキュリティチェックを殆ど行わない代わりに、呼び出し速度を上げる」というものです。

方法2.
[DllImport(DLL_NAME, EntryPoint = "IsLoli"), SuppressUnmanagedCodeSecurity]
public static extern bool IsLoli(int num);

この方法はセキュリティチェックが初めの1回しか行われないので、MSDNのサイトにも書いてある通りセキュリティホールから悪意のあるコードが関数呼び出しを行うことも十分考えられるわけです。
速度にばかり気を取られ、セキュリティ面が疎かになっていては(かなり)まずいですから、くれぐれも慎重に使っていきたいものですね。

……と良いつつ、自分は方法2をばんばん使ってますが・・・^^;

0 件のコメント: