• 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中编写一个dll,然后在vb中调用(解答后就给分)等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 高分求学:在VC中编写一个dll,然后在vb中调用(解答后就给分)
描述:

在VC中编写一个dll,然后在vb中调用
最好给出一个例子


解决方案1:

来晚了,恭喜楼主又可以收工了,:-)

解决方案2:

呵呵,我也来一个,谢谢!
cronyzhang@hotmail.com

解决方案3:

一般来说,VB和VC共同编程有3种方式:一种是VC生成DLL,在VB中调用DLL;一种是VC生成ActiveX控件(.ocx),在VB中插入;还有一种是在VC中生成ActiveX Automation服务器,在VB中调用。相对而言,第一种方法对VC编程者的要求最低,但要求你的伙伴进行配合,我推荐这种方法。 
    先说说VC++的编程。首先在VC++中生成Win32 DLL工程。在这个工程中添加几个函数供VB用户调用。一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一个是必须是export的。要做到第一条,只须在函数声明前加上__stdcall关键字。如: 
    short __stdcall sample(short nLen, short *buffer) 
    要做到第二条,需要在*.def文件中加上如下的几行: 
    EXPORTS 
     sample @1 
    这里的sample是你要在VB中调用的函数名,@1表示该函数在DLL中的编号,每个函数都不一样。注意这里的函数名是区分大小写的。至于你说的需要传递大量数据,可以这样做,在VB中用一个数组存放数据,然后将该数组的大小和地址传给VC(至于如何在VB中编程我会在下面介绍)。就象上面的例子,nLen是数组大小,buffer是数组地址,有了这两条,你可以象使用VC的数组一样进行处理了。至于输出图形,可以生成WMF或BMP格式,让VB调用。不过,我认为也可以直接输出到视窗,只要VB将窗口的句柄hWnd和hDC以及视窗的绘图位置(VB和VC采用的坐标系必须一致才行)传给VC就行了。而VB的AutoRedraw属性必须为False,在Paint事件中调用VC的绘图程序。 
    再谈谈VB的编程。VB调用DLL的方法和调用Windows API的方法是一样的,一般在VB的书中有介绍。对于上面一个例子,先要声明VC函数: 
    Declare Function sample Lib "mydll.dll" (ByVal nLen As Integer, buffer As Integer) As Integer 
    这里mydll.dll是你的dll的名字。你可能已经注意到了两个参数的声明有所不同,第一个参数加上了ByVal。规则是这样的:如果在VC中某个参数声明为指针和数组,就不加ByVal,否则都要加上ByVal。在VB中调用这个函数采用这样的语法: 
    sample 10, a(0) 
    这里的a()数组是用来存放数据的,10为数组长度,这里的第二个参数不能是a(),而必须是要传递的数据中的第一个。这是VB编程的关键。 
    下面在说几个可能遇到的问题。一个问题是VB可能报告找不到dll,你可以把dll放到system目录下,并确保VB的Declare语句正确。另一个问题是VB报告找不到需要的函数,这通常是因为在VC中*.def文件没设置。第三种情况是VB告诉不能进行转换,这可能是在VC中没有加上__stdcall关键字,也可能是VB和VC的参数类型不一致,注意在VC中int是4个字节(相当于VB的Long),而VB的Integer只有2个字节。必须保证VB和VC的参数个数相同,所占字节数也一致。最后一个要注意的问题是VC中绝对不能出现数组越界的情况,否则会导致VB程序崩溃。 
    总的来说,你和你的伙伴需要一些时间来进行协调和摸索,但这种方法绝对可行,也不难掌握。

解决方案4:

我这儿正好有例子。你留下信箱。


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

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

  • 高分求学:在VC中编写一个dll,然后在vb中调用(解答后就给分)

相关文章

  • 2017-06-04 还有人知道这是什么警告阿?
  • 2017-06-05 c++中调用ActiveX控件的方法
  • 2017-06-05 如何制作DLL
  • 2017-06-04 ActiveX控件和Windows标准控件有什么相同和不同
  • 2017-06-05 在WIN下如何检测一进程是否死锁?
  • 2017-06-04 关于OPC历史数据服务器开发,在使用IOPCHDA_Server时出现‘向占位程序传送了空的索引指针’的错误
  • 2017-06-04 Dmsexe中的0x7c812afb处最可能的异常:MicrosoftC++异常:内存位置0x0012f1bc处的_com_error
  • 2017-06-05 powercfgcpl文件
  • 2017-06-05 VC++串口程序
  • 2017-06-04 求ADSL拨号的网卡类型和VPN拨号的网卡类型?

文章分类

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

最近更新的内容

    • WebServices浏览器的使用问题
    • 看:如何在程序中判断系统中有进程已经停止响应了????
    • 怎样外部终止一个线程的运行,并释放其相关资源,在线!!!!!!!!!
    • 在创建线程的函数内,如何知道线程已经结束?
    • windowsserver2008系统COM问题
    • 获得组件的接口的工具
    • 在ActiveX控件中绘制真彩色BMP图片怎么变成黑白的了
    • 借助DEF文件封装DLL的工具?
    • sqlite用程序打开外键没用
    • 怎么作才能使一个win32staticLibrary中的一个函数返回多个变量值

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

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