2010-09-09 109 views
1

我想从我的C#.NET 2.0应用程序访问kernel32.dll中的GetProcAddress函数。 MSDN网站显示其C原型为C#中的DLL外部函数声明#

FARPROC WINAPI GetProcAddress(
    __in HMODULE hModule, 
    __in LPCSTR lpProcName 
); 

如何将其转换为C#?我想我已经得到了大部分:

private static extern delegate GetProcAddress(IntPtr hModule, string lpProcName); 

不过,我认为使用delegate关键字是错误的。我应该改变什么,以便我可以从我的应用程序访问此功能?谢谢。

回答

2

PInvoke.Net具有良好的样品为这个API

internal static class UnsafeNativeMethods { 
    [DllImport("kernel32", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=true)] 
    internal static extern IntPtr GetProcAddress(IntPtr hModule, string procName); 
} 

internal delegate int DllRegisterServerInvoker(); 

// code snippet in a method somewhere, error checking omitted 
IntPtr fptr = UnsafeNativeMethods.GetProcAddress(hModule, "DllRegisterServer"); 
DllRegisterServerInvoker drs = (DllRegisterServerInvoker) Marshal.GetDelegateForFunctionPointer(fptr, typeof(DllRegisterServerInvoker)); 
drs(); // call via a function pointer 

文章链接

+0

谢谢,这是非常有帮助! – 2010-09-14 19:07:07