2010-09-09 108 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