C#访问非托管DLL

前段时间写了一个读卡器程序,使用到了一个DLL。在.NET 中调用DLL还是相当简单的。我也是转别人的代码,自己的不写。下面就是代码:

C#中要使用动态链接库中的导出函数,只能在程序中根据DllAtribute显示调用,无法在运行阶段动态加载,但是我们可以利用WIN32 API的LoadLibrary和FreeLibrary打到目的,问题是根据GetProcAddress()函数获取到的导出函数的地址无法在C#中利用,网上很多方法多是利用对函数调用栈的操作来达到在C#中操作的目的.    其实如果导出函数没有返回值,完全可以利用另一个API函数达到动态绑定DLL库的目的:

LRESULT CallWindowProc( WNDPROC lpPrevWndFunc,

    HWND hWnd,

    UINT Msg,

    WPARAM wParam,

    LPARAM lParam

);

如果导出函数无形参也无返回值的话,可以直接调用CallWindowProc(FunctionName,0,0,0,0),如果我们需要向导出函数传递简单参数的话,也可以自定义一个消息,用消息封装实参。

[DllImport("kernel32")]

public extern static int LoadLibrary(string lpLibFileName);

[DllImport("kernel32")]

public extern static bool FreeLibrary(int hLibModule);

[DllImport("kernel32", CharSet=CharSet.Ansi)]

public extern static int GetProcAddress(int hModule, string lpProcName);

[DllImport("user32", EntryPoint="CallWindowProc")] 

public static extern int CallWindowProc(int lpPrevWndFunc, int hwnd, int MSG, int wParam, int lParam);



private void button1_Click(object sender, System.EventArgs e)

{

int hmod=LoadLibrary("*****.dll");

int pFname=GetProcAddress(hmod, "*****");

CallWindowProc(pFname,0,0,0);

FreeLibrary(hmod);

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NETCore

MVVM绑定多层级数据到TreeView并设置项目展开

昨天在做项目的时候碰到了这个问题,发现通常我们定义的数据不法绑定到控件上,接下来我将讲一下我是怎么解决这个问题的。

14720
来自专栏逆向技术

64位内核第二讲,进程保护之对象钩子

         64位内核第二讲,进程保护. 一丶什么是保护. 什么是保护. 比如我们安装了xxx杀毒软件.那么此时你用任务管理器关闭.是关闭不了的.原因是内...

35360
来自专栏xingoo, 一个梦想做发明家的程序员

winsock库

加载Winsock库函数 : WSAStartup 1 int WSAStartup( 2 WORD wVersionReques...

20350
来自专栏博客园

讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

转自:https://www.cnblogs.com/sheldon-lou/p/9495377.html

12220
来自专栏跟着阿笨一起玩NET

Winform 中 DesignMode 返回值不正确的问题。

本文转载:http://blog.csdn.net/sabty/article/details/5325260

14110
来自专栏ASP.NETCore

使用Rx Framework实现XAML中的物体拖动

酝酿两年之后,微软发布了Reactive Extensions(Rx)库。Rx把事件驱动UI与LINQ、并发性和异步调用结合起来。

9620
来自专栏一“技”之长

iOS多线程编程之一——NSThread线程管理

NSTread是iOS中进行多线程开发的一个类,其结构逻辑清晰,使用十分方便,但其封装度和性能不高,线程周期,加锁等需要手动处理。

9830
来自专栏一个爱瞎折腾的程序猿

winform制作小工具的技巧

在使用winfrom制作一些工具的时候,一些基本设置都是去属性里面找来找去,一段时间就忘了,记录记录以备不时之需。

22230
来自专栏清风

Tomcat 容器 POI 生成 Excel 文件 可能会使用到 temp 临时文件夹

14330
来自专栏JackieZheng

探秘Tomcat——连接器和容器的优雅启动

前言: 上篇《探秘Tomcat——启动篇》粗线条的介绍了在tomcat在启动过程中如何初始化Bootstrap类,加载并执行server,从而启动整个tomc...

24580

扫码关注云+社区

领取腾讯云代金券