怎么调用别人的dll文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么调用别人的dll文件相关的知识,希望对你有一定的参考价值。
当我得到一个dll文件,当然除了这个文件外,还有知道这个文件控制的一些效果外,我就不知道任何信息了,但在实际的编程中,如果我想引用别人的dll文件我还需要知道这个文件的那些信息呢?是否还要从作者哪儿知道函数名称,接口名称,假设作者不愿透露,这个dll就是个黑盒子吗?
如果是简单的dll,没有导出为各种类的,仅导出了一些简单的函数。那么可以通过 Dependency walker 或者其他工具来检查dll的导出表,可以看到导出函数的函数名。通过名字猜测其意义。但函数的参数类型,个数,无法看到。
如果有一定水平,可通过反汇编,检查其堆栈顶移动的字节数猜测其参数个数。简单分析也不难得出其含义。
char 类型当 short 传.
char* 类型, 如果仅用作入参, 设置为 Type.String, 传入 bytes[] 即可.
如果用作出参, 则要用到 指针: Pointer, 譬如:
int buffer;
setParameter(2, Type.INT, buffer);
invoke 完毕后
Pointer headBuff = Pointer.createPointerToNativeMemory(buffer, 大小);
byte[] bytes = headBuffer.getMemory() 参考技术A 这个分情况:
如果是简单的dll,没有导出为各种类的,仅导出了一些简单的函数。那么可以通过 Dependency Walker 或者其他工具来检查dll的导出表,可以看到导出函数的函数名。通过名字猜测其意义。
但函数的参数类型,个数,无法看到。
如果有一定水平,可通过反汇编,检查其堆栈顶移动的字节数猜测其参数个数。简单分析也不难得出其含义。
如果是较复杂的dll,尤其是C++包含类的方法导出的DLL,那么就只好问作者要各种接口定义,导入库了。本回答被提问者采纳
类库_委托
一:类库:
说白了,就是让别人调用你写的方法,并且不让别人看到你是怎么实现的。
如果有功能你不会做,需要别人帮忙,那么你的同事可以帮你写好一个类,然后你来调用这个类中的方法,完成你的项目。
两种形式:
1、C#源代码文件,包括在自己的项目中(这种可以查看到具体是怎么实现的,也可以更改)
2、类库,.dll (虽然无法查看,但是生活中很多都是这样的,毕竟不能让别人看到你的核心代码,为了保密)
优点:你写的方法别人看不到实现过程,保密性强
缺点:如果你写的方法有错误,别人无法更改
---------------------------------------------------------
二:委托:
可以理解为 函数的指针
delegate - 定义关键词
具体操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 加减类;
using ClassLibrary1;
namespace 类库_委托
{
class Program
{
//声明委托类型
public delegate int FirstDel(int aaa, int bbb);
static void Main(string[] args)
{
int one = 10;
int two = 20;
//创建委托变量,赋值,函数指向
FirstDel f1 = new JiaJian().Jia;
int c = f1(10, 20);
Console.WriteLine(c);
Console.ReadKey();
}
}
}
-----------------------------------------------------------
var:万能类型
object:所有类型的基类
as:类型转换,如果转换不成功,不会报错,而是返回一个null
例:
ChengChu cc = ob as ChengChu;
is:判断某个变量/对象,是不是某一种类型,返回bool值
例:
if (ob is ChengChu)
{
ChengChu cc = ob as ChengChu;
}
泛型集合: List<T>
例:
List<ChengChu> list = new List<ChengChu>();
不固定长度,固定类型的一种集合
以上是关于怎么调用别人的dll文件的主要内容,如果未能解决你的问题,请参考以下文章