C# 中的 DLL 外部函数声明

发布于 2024-09-18 15:51:31 字数 428 浏览 1 评论 0原文

我正在尝试从我的 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 关键字是错误的。我应该更改什么才能从我的应用程序访问此功能?谢谢。

I am trying to access the GetProcAddress function in the kernel32.dll from my C# .NET 2.0 application. The MSDN sites shows its C prototype as

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

How do I convert this to C#? I think I've got most of it:

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

However, I think use of the delegate keyword is wrong. What should I change, so that I can access this function from my application? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鹿港小镇 2024-09-25 15:51:32

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

文章链接

PInvoke.Net has a good sample for this 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

Article Link

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文