• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > VC编译的DLL回调VB函数出错

VC编译的DLL回调VB函数出错

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了vc 回调函数,vc dll反编译,vc dll反编译工具,c dll 回调函数,delphi dll 回调等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: VC编译的DLL回调VB函数出错
描述:

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

    本人用VC6做了一个Win32标准DLL供VB6使用,DLL中用回调函数的形式来通知触发事件。DLL中导出的函数VB6都可正常使用,一旦在VB6中定义了回调函数,然后把这个函数的地址传回DLL中调用就程序蹦溃。DLL中没有涉及多线程。哪位有这方面经验的烦麻指点一下。若有相关的简单示例,请发一份给我,谢谢。俺的E-Mail: weichaogui@163.com
在VC DLL中的函数定义如下:

//回调函数定义
typedef int (CALLBACK *CALLBACKFUNCTION) (int a, int b);
//回调函数指针
CALLBACKFUNCTION g_lpCallBack = NULL;
//设置回调函数
extern "C" void __stdcall SetCallBack(CALLBACKFUNCTION lpCallBack)
{
    g_lpCallBack = lpCallBack;
    //回调函数设置成功,这里一调用就出错
     int c = g_lpCallBack(1, 2);
}

VB中的代码如下

'-----------------------------
'在Module文件中导入DLL函数
'-----------------------------
'设置回调函数
Declare Function SetCallBack Lib "../Bin/CallBackDll.dll" (ByVal lpCallBack As Long)
'回调函数
Function MyCallBack(ByVal a As Long, ByVal b As Long) As Long
    Dim c As Long
    c = a + b
    MyCallBack = c
End Function
'-------------------------
'在From中设置回调函数
'-------------------------
'回调函数地址
Dim lpCallBack As Long
'获取回调函数地址
Function GetCallBack(ByVal lpCallBack As Long) As Long
    GetCallBack = lpCallBack
End Function
'设置回调函数
Private Sub btnSetCallBack_Click()
    lpCallBack = GetCallBack(AddressOf MyCallBack)
    SetCallBack (lpCallBack)
End Sub


解决方案1:

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

解决方案2:

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

解决方案3:

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

解决方案4:

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

解决方案5:

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

解决方案6:

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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • vc调用excel函数的问题
  • 能收藏的技术问题JS回调VC组件
  • VC执行javascript函数
  • 在vc中如何写回调函数
  • VC调用Delphi写的回调函数的问题
  • VC编译的DLL回调VB函数出错

相关文章

  • 2017-06-04 atl做的曲线图,怎样实现图形的局部放大?
  • 2017-06-04 ACTIVEX控件怎样添加到工具箱中
  • 2017-06-04 ##求助大牛!webbrowser设置为silence后JavaScript出错后停止了脚本执行,如何重新启动脚本引擎??
  • 2017-06-05 请问在VC里面怎么设置要调用的DLL的路径
  • 2017-06-05 <windows核心编程>上APIHOOK,遇Ctrl+Alt+Delete失效
  • 2017-06-05 请问,如何实现锁屏?
  • 2017-06-05 异步可插入协议怎么用在IE上三贴(220分)
  • 2017-06-04 求助:VC调用Matlab编写的COM问题
  • 2017-06-05 一个进程能获得的最大内存是多少?
  • 2017-06-04 关于VC调用WMI的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 网页中调用ocx
    • DCOM服务器能不能释放指定的连接??
    • 高分请教,各位老大帮帮忙
    • 利用COM打开WORDEXCEL文档进行全文检索需要高手
    • 急!!!在ActiveX控件中的接口能有输出参数吗?怎样设置呢???????
    • 各位前辈!上头交给我个课题,要求我将一些算法封装以利于第三方能方便的使用,想到了用COM但是我没接触过希望各位能给我些建议
    • HELP哪位大侠能提供一下OPCclient端的VC源代码亚不要是demo版的
    • 怎么在VC2008中怎么创建atlserver项目
    • Thread訪問變量問題
    • COM中CWnd或其它窗口类型不能使用消息

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有