动态调用DLL的问题 本帖最后由 baiylhnh 于 2013-01-26 19:40:17 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Getfun 是一个函数类型。fun 是此函数类型的变量,在这里就相当于函数名称了,所以后面的 fun(2, 2) 等于调用了这个函数。@fun 是这个函数的地址,给 @fun 赋值等于这个函数有了实例。在赋值之前调用 fun(2, 2) 要出不可预知的严重错误,所以调用前要用 if Assigned(@Fun) 来检查赋值是否成功。如果用 C++ 写,就没这么多事,甭管什么地址,直接用就行。Pascal 是强类型语言,编译器要对所有变量做类型检查,这样很多错误在编译期间就能发现,免得在运行时出错搞得一头雾水,但也让 C++ 码农对 Delphi 的类型定义很不适应。 你说的我都知道.就是不明白什么意思嘛1函数类型是个什么类型.有什么用2@fun 是这个函数的地址 ,我用其它地址不行么.比如自定义的pointer 楼主:你大概比较熟悉 C++ 编程,对 Delphi 这一套不习惯。再解释一下。你调用的是 DLL 函数,Delphi 在调用前必须知道此函数有哪些参数,返回值是什么,怎么知道?你必须先定义一个函数类型,从而告诉 Delphi 这些(其实 C++ 也需要这种定义,只是定义方式不同)。你当然可以把 getprocaddress(DllHandle,'myfun') 返回的函数地址赋值给一个 Pointer 类型的变量,但是你不能直接用这个 Pointer 变量当函数来调用,因为 Delphi 不知道函数的参数和返回值是如何定义的。所以,你还是要把这个地址赋值给 @fun,然后调用 fun 才行。fun 这个名字无所谓,你可以叫做 myfun 或别的什么名字,关键是前面的函数类型定义要和 dll 中的实际函数一致才行。你不妨把那个函数定义(function(x, y: Integer): dword; stdcall; ),修改一下,例如,去掉一个参数,程序肯定会出错。编译时就会报错:函数调用和函数定义不符。你不妨在调用时也去掉一个参数(变成 fun(2)),编译时不出错了,dll 运行时会出错:因为少往堆栈压入一个参数,整个堆栈都会乱套,可能会是很严重的错误。 为什么我的Image载入一个 bmp 时提示stream read error 初学者的一个关于查询的语句 关于TDBLookupComboBox控件的问题 上哪找FORMULA ONE 5.0控件 高难度问题!!!!!! C/S,NT4.0, MSSQL6.5,当连接数超过120个,服务端就死翘翘????? 复制 table 时出现的一个问题---附源码 帮忙! BPL文件中的Form窗口在使用ADOQuery控件报错 新年到了,送分!限前五名! 这是什么意思???? vc 调用delphi dll遇到的异常 关于delphi 操作cookie的问题
1函数类型是个什么类型.有什么用
2@fun 是这个函数的地址 ,我用其它地址不行么.比如自定义的pointer