在C#中动态调用native dll的导出函数

2016-02-19 15:08 22 1 收藏

图老师小编精心整理的在C#中动态调用native dll的导出函数希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 编程语言 】

  在 C++ 中我们能够通过 LoadLibrary, GetProcAddress 来动态调用 dll 的导出函数.

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  在 C# 中也能够用这样的方式吗?

  在 DotNet 2.0 里面这样是可以的, 这完全得益于 2.0新增的一个函数,Marshal.GetDelegateForFunctionPointer 方法。此方法在 .NET Framework 2.0 版中是新增的。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  将非托管函数指针转换为委托。

  实例代码如下:

public delegate int MsgBox(int hwnd,string msg,string cpp,int ok);[DllImport("Kernel32")]public static extern int GetProcAddress(int handle, String funcname);[DllImport("Kernel32")]public static extern int LoadLibrary(String funcname);[DllImport("Kernel32")]public static extern int FreeLibrary(int handle);private static Delegate GetAddress(int dllModule, string functionname, Type t){ int addr = GetProcAddress(dllModule, functionname); if (addr == 0)  return null; else  return Marshal.GetDelegateForFunctionPointer(new IntPtr(addr), t);}private void button1_Click(object sender, EventArgs e){ int huser32 = 0; huser32 = LoadLibrary("user32.dll"); MsgBox mymsg = (MsgBox)GetAddress(huser32, "MessageBoxA", typeof(MsgBox)); mymsg(this.Handle.ToInt32(), txtmsg.Text, txttitle.Text , 64); FreeLibrary(huser32);}

来源:http://www.tulaoshi.com/n/20160219/1608972.html

延伸阅读
对于Windows平台,显示器的分辩率和颜色数很重要,尤其是对于多媒体应用软件和游戏软件。但许多情况下,用户当前的屏幕设置并不适合软件的运行需要。软件通常的做法是提示用户将屏幕设置到软件要求的分辩率及颜色数,再重新启动软件。这样无疑会增加普通用户操作上的负担和困难,降低了软件的友好性和易用性。 ----理想的作法是:在软件开始...
API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法,或者是调用Windows API函数的接口,也就是说具备调用动态连接库的能力。Visual C#和其它开发工具一样也能够调用动态链接库的API函数。本文中笔者就结合实例向大家介绍在Visual C#中如何调用各...
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的。本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助。另外如果安装了Visual Studio .net的话,在C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Interop\P...
Windows服务是独立于登录用户而工作的Windows应用程序,它通常在计算机启动时开始执行,且常常连续执行,直到计算机关闭为止。像Exchange Server,IIS和杀毒软件等都使用这种方式,这样就可以独立于某一用户而且可以在任何用户登录前来运行,同时也可以服务于所有的进程,从而以一种服务的形式存在。 正因为Windows服务有着这么多的特...
摘 要:构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误。本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项。 关键字:构造函数;析构函数;垃圾回收器;非托管资源;托管资源 一.构造函数与析构函数的原理 作为比...

经验教程

871

收藏

84
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部