C#中的DLL外部函数声明

时间:2010-09-09 21:58:22

标签: c# dll

我正在尝试从我的C#.NET 2.0应用程序访问kernel32.dll中的GetProcAddress函数。 MSDN站点将其C原型显示为

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

如何将其转换为C#?我想我已经掌握了大部分内容:

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

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

1 个答案:

答案 0 :(得分:2)

PInvoke.Net有一个很好的API 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

文章链接