c#引入dll文件报错_C#中调用Dll动态链接库

本文详细介绍了在C#中如何使用UnmanagedExports库调用Dll动态链接库,包括DllImportAttribute的使用,如BestFitMapping、CallingConvention、CharSet、EntryPoint等属性的详细解释,并给出了具体的示例代码,帮助开发者理解如何正确地导入和调用非托管DLL函数。
摘要由CSDN通过智能技术生成

C#中调用Dll动态链接库

起始

受限于语言的不同,我们有的时候可能会用别人提供的函数及方法

或者其他的什么原因、反正就是要调!!!

恰巧别人所使用的的语言跟自己又不是一样的

这个时候想要调用别人的函数库就需要借用一些别的东西了

今天我们要说的是“UnmanagedExports”

当前我所要实现的目的只是为某一QQ机器人编写插件

但我又不喜欢某中文编程语言,编程习惯导致 233333

在这里我们还可以使用进程间UDP通信来解决这个问题(编写插件的问题)

但是这种方法局限性比较大,操作起来又略显繁琐

所以今天介绍一下“UnmanagedExports”这个nuget包

经过

打开nuget包管理器,为你所在的项目的安装上这个包,这里就不在复述了

之后便可以以类似下面的写法来调用Dll

首先需要声明需要调用的函数及其对用的Dll

[DllImport("user32.dll")]//DllImportAttribute

public static extern int MsgBox(int hWnd, String text, String caption, uint type);

这里告诉编译器我们需要调用的Dll名称及其对应的方法定义

使用“extern”关键字来标识这个方法是从外部引用

关于“DllImportAttribute”的属性会在下面讲到

DllImportAttribute详解

DllImportAttribute是一个重要的角色,其主要作用是给CLR指示哪个Dll是需要调用的外部库。

字段

说明

BestFitMapping

启用或禁用最佳匹配映射。

CallingConvention

指定用于传递方法参数的调用约定。 默认值为 WinAPI,该值对应于基于 32 位 Intel 的平台的 __stdcall。

CharSet

控制名称重整以及将字符串参数封送到函数中的方式。 默认值为 CharSet.Ansi。

EntryPoint

指定要调用的 DLL 入口点。

ExactSpelling

控制是否应修改入口点以对应于字符集。 对于不同的编程语言,默认值将有所不同。

PreserveSig

控制托管方法签名是否应转换成返回 HRESULT 并且返回值有一个附加的 [out, retval] 参数的非托管签名。默认值为 true(不应转换签名)。

SetLastError

允许调用方使用 Marshal.GetLastWin32Error API 函数来确定执行该方法时是否发生了错误。 在 Visual Basic 中,默认值为 true;在 C# 和 C+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值