0

すべて、実行時にを使用してアプリケーションから呼び出したいC#DLLがいくつかありますSystem.Reflection。私が使用するコアコードは次のようなものです

DLL = Assembly.LoadFrom(Path.GetFullPath(strDllName));
classType = DLL.GetType(String.Format("{0}.{0}", strNameSpace, strClassName));
if (classType != null)
{
    classInstance = Activator.CreateInstance(classType);
    MethodInfo methodInfo = classType.GetMethod(strMethodName);
    if (methodInfo != null)
    {
        object result = null;
        result = methodInfo.Invoke(classInstance, parameters);
        return Convert.ToBoolean(result);
    }
}

refDLL内で起こったことから情報を抽出できるように、パラメーターの配列をDLLに渡す方法を知りたいです。私が欲しいものの明確な描写(しかしもちろんコンパイルされません)は

result = methodInfo.Invoke(classInstance, ref parameters);

どうすればこれを達成できますか?

4

1 に答える 1

2

パラメータへの変更refは、に渡す配列に反映されますMethodInfo.Invoke。あなたはただ使用します:

object[] parameters = ...;
result = methodInfo.Invoke(classInstance, parameters);
// Now examine parameters...

問題のパラメーターが(タイトルに従って)パラメーター配列である場合は、それを別のレベルの配列でラップする必要があることに注意してください。

object[] parameters = { new object[] { "first", "second" } };

CLRに関する限り、これは1つのパラメーターにすぎません。

これで問題が解決しない場合は、短いが完全な例を示してください。デモンストレーションに別のDLLを使用する必要はありません。Mainメソッドを備えたコンソールアプリと、リフレクションによって呼び出されるメソッドだけで十分です。

于 2012-05-28T09:16:59.500 に答える