现在我用VB6.0 封装C语言API接口,  现在的情况是, 我VB调用到C 的一个函数的时候, 调试的时候到执行return 0这行,就有报下面那这个错误
> kernel32.dll!7c84a703() 
  [下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号]
  oleaut32.dll!775f4341() 
  VBA6.DLL!0fa9fcf7()  因为我申请了好多结构体,并且是有嵌套的, 我发现我如果去掉了2个结构体就不报这个错误,是不是申请的所有的结构体占用的总的大小是有限制的? 有的话能不能改大一点。或者有其他原因造成的,请高手指点啊拜托啦

解决方案 »

  1.   

    这个不是错误,只是发生错误的时候程序的调用堆栈而已。
    (比如a()调用了b(),b()调用了c(),c()调用了d(),d()函数中出错了,你会看到
    >模块名.d() d的地址
     c ...
     b ...
     a ...
    这就是一个调用堆栈)所以单单就你的描述无法判断是什么错误。
      

  2.   

    但是现在只有这些信息,只知道在哪个函数里出的发生的,别的就只能看到这些调用堆栈的信息了,现在可以保证的是C的函数没有任何问题, 现在能判断的是在封装成VB接口后,VB这部分的问题。我已经确认了,我申请的结构体是正确的,函数封装是正确的,传参是正确的,现在真不知道是哪里出了问题,我在另一台机器上用VB6.0跑,也是这个结果。 
      

  3.   

    C API是以什么方式调用的?dll?
      

  4.   

    现在问题定位到 用户的自定义数据类型的问题。用VB封装C的接口,采用直接调用dll的方式,C中的结构体有void* unsigned char DWORD 几种数据类型, 但是到了VB里怎么对应啊, 我在VB里申请的自定义数据类型里应该怎么写啊
      

  5.   

    不要做A语言代码修改为B语言代码的无用功。
    也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
    只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
    即可很方便地让A、B两种语言之间协调工作。