函数参数为自定义数据类型时的问题

AM_WJ 2003-02-26 09:07:44
我在组件里的类里的一个函数用了自定义数据类型为参数,在前台的程序里调用这个组件对象的这个函数时出现编译错误,说只有定义在公共对象模块中用户定义类型和变体类型相互转换或传递给后期绑定功能。
不明白什么意思,如果解决呢?(我已经在前台程序里定义和组件里一样的那个自定义的数据类型)
...全文
75 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Matthewzhong 2003-02-27
  • 打赏
  • 举报
回复
这是因为你的自定义类型不是全局的所以在你的窗体模块中不能被识别,
你最好不用自定义类型,如果一定要用就添加一个标准模块把自定义类型放在标准模块中就行了。
AM_WJ 2003-02-26
  • 打赏
  • 举报
回复
我已经将组件中那个函数的参数改成了按地址传递ByRef但是还是报一样的错,这个组件不是用C写的是用VB写的
soec 2003-02-26
  • 打赏
  • 举报
回复
NO,/.
用户 昵称 2003-02-26
  • 打赏
  • 举报
回复
VB调用C DLL时的参数传递问题
首先必须了解此函数在C中的原型,包括参数类型和传递方式。

C DLL 原型 VB声明 VB调用

int a ByVal a as long Call func(…,a,…)
long a ByRef a as long Call func(…,byval a,…)
int *pa ByRef pa as long Call func(…,pa,…)
long *pa ByVal pa as long Call func(…,varptr(pa),…) *(1)
char *pstr ByVal pstr as string Call func(…,pstr,…) *(2)
wchar *pstr ByRef pstr as string Call func(…,byval pstr,…)
struct tagX *p ByRef p as tagX Call func(…,ptag,…) *(3)
HANDLE h ByVal h as long Call func(…,h,…) *(4)

注意

1)不推荐使用此方式

2)如果DLL要求一个字符串缓冲区,一定要在调用前初始化字串,即dim t as string * 50

3)用户定义子类型必须用ByRef方式传递,

4)任何内核对象的句柄(process, thread, module, file, filemapping, semaphore等)和大多数GDI对象的句柄都能用此方式传递。
用户 昵称 2003-02-26
  • 打赏
  • 举报
回复
byref
Girl1983 2003-02-26
  • 打赏
  • 举报
回复
用PUBLIC aaa As ...
yefm 2003-02-26
  • 打赏
  • 举报
回复
定义成object

7,759

社区成员

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

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