本帖最后由 weichaogui 于 2011-01-07 15:53:48 编辑

解决方案 »

  1.   

    这个回调函数若是VC的则非常的正常,一旦用VB中的就不行,对VB不熟,所以不知道是DLL中的问题还是VB中的问题。
      

  2.   

    还没这样用过,只是VC写DLL供VB使用,没有函数传递都是参数传递
      

  3.   

    VB的回调,VC不一定方便调用,可以考虑用其他进程通信方式等. 
      

  4.   

    没人知道吗?现在我把DLL改为OCX的形式供VB6调用,DLL中回调函数也相应的改用OCX中的事件方式。我在OCX中增加了多线程,在线程里触发事件,这样做也会崩溃。无奈之下只好定义了一些全局变量和标志,在线程中改变这些变量和标识,然后在定时器中监视这些变量标志来触发事件,这样做程序就不会崩溃了,但这方式我觉得比较呆笨,哪位有这方面的经验,请不吝赐教。还有就是在VC中的PBYTE类型,我导出来是用VARIANT还是VARIANT* ? 在VB中又如何把VARIANT或VARIANT*转为Byte数组?
      

  5.   

    可以把PBYTE等转成数组等,然后用VARIANT等,VB中在转换
      

  6.   

    回调函数的堆栈调用约定是否一致呢,如果不一致在debug版本中检测堆栈平衡时就会发现错误导致出错.
      

  7.   

    感觉给vb的东西还是做成COM,你这种方式能否成功还真不知道
      

  8.   

    typedef int (CALLBACK *CALLBACKFUNCTION) (int a, int b);
    改为typedef int (CALLBACK __stdcall (*CALLBACKFUNCTION)) (int a, int b);试试,呵呵