(急!)如何将一个自定义的结构数组的头指针传递给.dll中的函数

wangxd123 2000-04-20 06:00:00
你好!
我遇到了一个问题!希望你能帮我解决.
我首先需将一个.dll中的函数readCarddir(PFDIR CardDir) ,其中:PFDIR是一个结构:
PFDIR(
int FileID
byte No
byte Access
)
请问:1.我如何在程序中声明readCardDir()函数
2.在vb的程序中我该如何调用它

附:readCarddir(PFDIR CardDir) 函数在被调用后将返回所有能得到的PFDIR结构的数据,并保存在CardDir中,CardDir参数在C语言中是一个 指向自定义结构数组的头指针

希望您能帮助我!
email:wangxd123@163.net
phone:0755-5611571 0755-5627413
...全文
207 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
thriller 2000-04-21
  • 打赏
  • 举报
回复
声明是一样的,不过如果希望得到数组元素的数量,应该在DLL中加一个参数即应为:
readCarddir(PFDIR CardDir,int cNumber)
声明时这样:
declare function "readCarddir" lib ... (CardDir as PFDIR, Byval cNumber as long)?as long
记住:第一个参数没有Byval,而第二个必须有Byval。
另外可以参考我的文章《在VB中使用指针》。
thriller
thriller 2000-04-21
  • 打赏
  • 举报
回复
声明是一样的。
不用怀疑了,快试试吧。
记住!别使用Byval。
唉,想得点分真难。
thriller
请参看《在VB5中使用指针》
wangxd123 2000-04-21
  • 打赏
  • 举报
回复
如果可以这样调用:
dim a(0 to 20) as PFDIR
call readCardDir(a(0))

那么如何进行声明呢,readCarddir(PFDIR CardDir) 中的参数该如何定义呢?
请回复!
谢谢了
原作者

thriller 2000-04-21
  • 打赏
  • 举报
回复
softdoctor说的对。
抱歉马虎了。
你没说传递的是一个自定义结构的数组嘛。
dim a(0 to 20) as PFDIR
call readCardDir(a(0))

OK.
thriller
wangxd123 2000-04-20
  • 打赏
  • 举报
回复
thriller :
首先感谢你的热情!
不过我得再说一遍传递的是一个自定义结构的数组的头指针,而不是一个结构!
原作者:
softdoctor 2000-04-20
  • 打赏
  • 举报
回复
thriller 的

type PFDIR
FileID as integer
Number as byte
Access as byte
end type


FileID as integer
应该改为
FileID as long

好象VB中integer是二字节的
在Windows下C中的int为四字节长
thriller 2000-04-20
  • 打赏
  • 举报
回复
1.我如何在程序中声明readCardDir()函数
declare function "readCarddir" lib ... (CardDir as PFDIR ) as long

type PFDIR
FileID as integer
Number as byte
Access as byte
end type

2.在vb的程序中我该如何调用它
dim a as PFDIR
call readCardDir(a)
如果DLL没问题,以上代码保证运行。
把分给我吧!
资源介绍:手册编写: 吴涛  Liigo  云外归鸟  邓学彬  龚辟愚  王家元 官方手册: 00.易语言支持库开发包   01.支持库实际上是一个DLL动态连接库   02.支持库LIB_INFO数据结构   03.LIB_INFO成员详细说明   04.易语言的数据类型及数据存储方式   05.接收来自易语言的通知   06.支持库常量说明   07.易语言IDE系统添加辅助功能   08.定义并实现全局命令   09.支持库自定义数据类型   10.自定义数据类型的所属成员函数   11.定义普通数据类型(非窗口单元、菜单)   12.定义窗口单元数据类型   13.支持库升级和调试 命令实现: 传递参考型参数   传递参考型变量或数组   传递参考型数组参数   传递变量或数组参数   传递复合数据类型参数   传递数组型参数   传递窗口单元数据类型参数   无限参数命令   特殊命令置入代码   返回复合数据类型数据   返回数组命令   返回通用型数据 自定义类型: 01.自定义数据类型   02.定义成员函数   03.成员函数_构造   04.成员函数_析构   05.成员函数_复制对象   06.定义普通数据类型   07.定义窗口单元数据类型   08.窗口单元属性   09.窗口单元事件   10.窗口单元的对外接口   11.窗口单元创建   12.窗口单元属性更新   13.窗口单元属性自定义数据   14.窗口单元属性被修改   15.窗口单元获取属性   16.窗口单元获取全部属性   17.窗口单元按键信息   18.窗口单元触发事件   19.窗口单元实现注意事项 辅助函数: 01.易语言通知函数   02.分配内存   03.释放内存   04.分配文本数据指针   05.分配字节集数据指针   06.分配数组数据指针   07.取窗口单元指针   08.取回数据类型的类别   09.取数组数据部分首地址及成员数目   10.报告运行时错误 静态编译: 01.支持库静态编译改造   02.修改函数名称和符号导出方式   03.系统通知的函数返回特定的信息   04.去除库定义相关信息   05.VC6的具体操作   06.静态支持库的发布   07.迷你版的CFreqMem类 资源界面:资源下载:
模块基础信息: 有38个子程序 有8个数据类型 有6个类 { Heap(堆处理)//11个类方法Local(局部内存操作)//9个类方法进程//11个类方法内存操作API(内存操作)//10个类方法Global(全局内存操作)//11个类方法Virtual(虚拟内存操作)//7个类方法} 有58个DLL命令 有48个常量 更新信息: @3.11更新:{加入未公开常量 2 个加入【内存操作】类DLL 未公开DLL 2 个 共未公开DLL 2 个加入汇编函数未公开汇编函数 5 个 共未公开汇编函数 5 个}并且对一部分命令和注释进行了调整!!! 本次对例程也进行了更新~ 至于DLL和主程序之间的传递可以看我的作品:Relative-RZJ 通用IDE V2.2.78.3的代码 主程序DLL: 等等......那么使用本模块可以有哪些作用? 你有想过把自定义的数据结构变量保存到硬盘吗? 你有想过给DLL自定义的数据结构变量吗? 你想跳出现有的变量限定吗? 你想为所欲为吗? ......Emmm搞错了,不能为所欲为...... 你想跳出限定吗? 你想强制进行任意类型数据转换吗? 也许它能满足你的愿望! R_取通用数据类型() !!注:经测试该函数不是很准确 有可能会误判 仅供参考 请慎用自定义类型 或 函数指针 这两种判定得比较准确 因为内存的特征较多 文本型可能会被误判为数组或数值 传来参数如果实际为的数值类型 但其如果恰表示一个指针 则也容易被误判为其他类型 Global.取结构体尺寸()注意结构不能嵌套再其他结构或含有数组,同时不能含有字节型、短整数型、字节集型的成员,否则会出问题;并且也都不能直接传字节集。因为E自定义数据类型嵌套结构数组使用的是指针,发布到坛论易精与C/C++直接为数据体不同;并且E的自定义数据类型里小于4字节的成员会被扩展为4字节,以实现对齐如果结构像平时那样直接声明为结构时,E会自动把结构转换为C/C++的标准的那种,但结构写为通用型时E只简单传递结构指针不做转换R_指针到数据_变量()【本质是将源数据的值写入目标变量,源数据不是基本类型的时候就是传指针了(注意如果源数据与目标变量类型不能兼容的话,程序就会崩溃)[还可实现父类到子类向下转型等]】

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧