static void CallUnmanageFunction(string dllName, string functionName, params object[] parameters)
{
IntPtr dllHandle = LoadLibrary(dllName);
IntPtr functionHandle = GetProcAddress(dllHandle, functionName);
List<Type> typeParameters = new List<Type>();
foreach (object p in parameters)
{
typeParameters.Add(p.GetType());
}
Type type = Expression.GetDelegateType(typeParameters.ToArray());
Delegate function = Marshal.GetDelegateForFunctionPointer(functionHandle, type);
function.DynamicInvoke(parameters);
}
static void Main(string[] args)
{
CallUnmanageFunction("user32.dll", "MessageBoxA", IntPtr.Zero, "Es funktioniert", "Test", (uint)0);
}
Я хочу вызвать неуправляемую функцию, указав имя библиотеки и имя функции в виде строки, а параметры — в виде обычных типов (параметры params object[]). Функция "GetDelegateForFunctionPointer" ожидает неуниверсального типа делегата, но функция "GetDelegateType" класса "Expression" дает общий "Action" или "Func"-Delegate. Есть ли у кого-нибудь идеи для решения этой проблемы?
Извините за мой плохой английский, это мой худший предмет в школе. Заранее большое спасибо за ответ! :)
MessageBox.Show
? - person Sriram Sakthivel   schedule 02.11.2013