是否有可能使用反射和C#.NET在.NET发布之前用动态调用不同的函数(带参数)来编写C或C(非托管代码)?
如果可能的话,smole C#示例将不胜感激!
谢谢!
BR,
米兰.
解决方法:
是的,使用Marshal.GetDelegateForFunctionPointer在.NET中可以进行动态P / Invoke.请参阅Patrick Smacchia撰写的文章Writing C# 2.0 Unsafe Code中的委托和非托管函数指针部分中的以下示例:
using System;
using System.Runtime.InteropServices;
class Program
{
internal delegate bool DelegBeep(uint iFreq, uint iDuration);
[DllImport("kernel32.dll")]
internal static extern IntPtr LoadLibrary(String dllname);
[DllImport("kernel32.dll")]
internal static extern IntPtr GetProcAddress(IntPtr hModule,String procName);
static void Main()
{
IntPtr kernel32 = LoadLibrary( "Kernel32.dll" );
IntPtr procBeep = GetProcAddress( kernel32, "Beep" );
DelegBeep delegBeep = Marshal.GetDelegateForFunctionPointer(procBeep , typeof( DelegBeep ) ) as DelegBeep;
delegBeep(100,100);
}
}
还有Junfeng Zhang描述的另一种方法,它也适用于.NET 1.1:
07001