此问题与我之前提出的问题有关 - dynamically running a DLL at a remote Windows box? 首先,感谢您提供的所有有用见解。
我找到了一种在远程计算机上运行DLL的方法。
现在我要做的是如下
(1)将DLL发送到远程机器
(2)向远程机器发送命令以在DLL中运行函数。
命令可能包含诸如(a)DLL的位置(2)函数入口点(3)参数之类的内容。
问题是......在给定的DLL中,可能只有任何具有各种返回类型和参数的函数。
对于如何有效地将DLL函数与未知返回类型和未知参数绑定,您有什么建议吗?我是否应该限制远程机器可以运行的功能类型?
这是我在C#中的代码片段...
[DllImport("kernel32")]
public extern static IntPtr LoadLibrary(string dllToLoad);
[DllImport("kernel32")]
public extern static Boolean FreeLibrary(IntPtr hModule);
[DllImport("kernel32")]
public extern static IntPtr GetProcAddress(IntPtr hModule, string procedureName);
// THIS IS THE PART THAT I HAVE A PROBLEM WITH.
// Since I want to bind MyFunction to just about any function in a DLL, I sure cannot declare the following as something like "double".
// Also there could just be any combinations of parameters (e.g. int, string, double..)
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate double MyFunction(int arg);
答案 0 :(得分:0)
您可以使用Func类型
public delegate TResult Func<TResult>();
public delegate TResult Func<T, TResult>(T arg);
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
public delegate TResult Func<T1, T2, T3, TResult>
(T1 arg1, T2 arg2, T3 arg3);
public delegate TResult Func<T1, T2, T3, T4, TResult>
(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
创建委托类型后,您可以使用Marshal.GetDelegateForFunctionPointer http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.getdelegateforfunctionpointer(VS.80).aspx
编辑: 参考这篇文章 Generating Delegate Types dynamically in C#