怎么调用别人的dll文件
当我得到一个dll文件,当然除了这个文件外,还有知道这个文件控制的一些效果外,我就不知道任何信息了,但在实际的编程中,如果我想引用别人的dll文件我还需要知道这个文件的那...
当我得到一个dll文件,当然除了这个文件外,还有知道这个文件控制的一些效果外,我就不知道任何信息了,但在实际的编程中,如果我想引用别人的dll文件我还需要知道这个文件的那些信息呢?是否还要从作者哪儿知道函数名称,接口名称,假设作者不愿透露,这个dll就是个黑盒子吗?
展开
2个回答
展开全部
如果是简单的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()
但函数的参数类型,个数,无法看到。
如果有一定水平,可通过反汇编,检查其堆栈顶移动的字节数猜测其参数个数。简单分析也不难得出其含义。
char 类型当 short 传.
char* 类型, 如果仅用作入参, 设置为 Type.String, 传入 bytes[] 即可.
如果用作出参, 则要用到 指针: Pointer, 譬如:
int buffer;
setParameter(2, Type.INT, buffer);
invoke 完毕后
Pointer headBuff = Pointer.createPointerToNativeMemory(buffer, 大小);
byte[] bytes = headBuffer.getMemory()
展开全部
这个分情况:
如果是简单的dll,没有导出为各种类的,仅导出了一些简单的函数。那么可以通过 Dependency Walker 或者其他工具来检查dll的导出表,可以看到导出函数的函数名。通过名字猜测其意义。
但函数的参数类型,个数,无法看到。
如果有一定水平,可通过反汇编,检查其堆栈顶移动的字节数猜测其参数个数。简单分析也不难得出其含义。
如果是较复杂的dll,尤其是C++包含类的方法导出的DLL,那么就只好问作者要各种接口定义,导入库了。
如果是简单的dll,没有导出为各种类的,仅导出了一些简单的函数。那么可以通过 Dependency Walker 或者其他工具来检查dll的导出表,可以看到导出函数的函数名。通过名字猜测其意义。
但函数的参数类型,个数,无法看到。
如果有一定水平,可通过反汇编,检查其堆栈顶移动的字节数猜测其参数个数。简单分析也不难得出其含义。
如果是较复杂的dll,尤其是C++包含类的方法导出的DLL,那么就只好问作者要各种接口定义,导入库了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询