怎么调用别人的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文件的主要内容,如果未能解决你的问题,请参考以下文章

易语言怎么调用DLL文件?

如何在编译器里设置调用别人写好的lib和dll步骤

易语言如何调用dll文件

Delphi简单调用DLL

易语言怎样调用dll

怎么将qt的开源库封装成dll