VB 调C 的相关问题。。。急!!!
现在我用VB6.0 封装C语言API接口, 现在的情况是, 我VB调用到C 的一个函数的时候, 调试的时候到执行return 0这行,就有报下面那这个错误> kernel32.dll!7c84a703()
[下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号]
oleaut32.dll!775f4341()
VBA6.DLL!0fa9fcf7()
因为我申请了好多结构体,并且是有嵌套的, 我发现我如果去掉了2个结构体就不报这个错误,是不是申请的所有的结构体占用的总的大小是有限制的? 有的话能不能改大一点。或者有其他原因造成的,请高手指点啊。。。拜托啦 --------------------编程问答-------------------- 这个不是错误,只是发生错误的时候程序的调用堆栈而已。
(比如a()调用了b(),b()调用了c(),c()调用了d(),d()函数中出错了,你会看到
>模块名.d() d的地址
c ...
b ...
a ...
这就是一个调用堆栈)
所以单单就你的描述无法判断是什么错误。 --------------------编程问答-------------------- 但是现在只有这些信息,只知道在哪个函数里出的发生的,别的就只能看到这些调用堆栈的信息了,现在可以保证的是C的函数没有任何问题, 现在能判断的是在封装成VB接口后,VB这部分的问题。我已经确认了,我申请的结构体是正确的,函数封装是正确的,传参是正确的,现在真不知道是哪里出了问题,我在另一台机器上用VB6.0跑,也是这个结果。 --------------------编程问答-------------------- C API是以什么方式调用的?dll? --------------------编程问答-------------------- 现在问题定位到 用户的自定义数据类型的问题。
用VB封装C的接口,采用直接调用dll的方式,C中的结构体有void* unsigned char DWORD 几种数据类型, 但是到了VB里怎么对应啊, 我在VB里申请的自定义数据类型里应该怎么写啊 --------------------编程问答-------------------- 不要做A语言代码修改为B语言代码的无用功。
也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
即可很方便地让A、B两种语言之间协调工作。
补充:VB , API