社区
ATL
帖子详情
高分求学:在VC中编写一个dll,然后在vb中调用(解答后就给分)
eliner
2004-04-19 05:07:36
在VC中编写一个dll,然后在vb中调用
最好给出一个例子
...全文
36
7
打赏
收藏
高分求学:在VC中编写一个dll,然后在vb中调用(解答后就给分)
在VC中编写一个dll,然后在vb中调用 最好给出一个例子
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangcrony
2004-04-19
打赏
举报
回复
啊?我要东西来了,这都给我分,惭愧呀!楼主真是大方啊!
王国凡
2004-04-19
打赏
举报
回复
来晚了,恭喜楼主又可以收工了,:-)
快乐鹦鹉
2004-04-19
打赏
举报
回复
呵呵。都发了。请接收。
zhangcrony
2004-04-19
打赏
举报
回复
呵呵,我也来一个,谢谢!
cronyzhang@hotmail.com
eliner
2004-04-19
打赏
举报
回复
linjiquan@163.com
谢谢
itmaster
2004-04-19
打赏
举报
回复
一般来说,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程序崩溃。
总的来说,你和你的伙伴需要一些时间来进行协调和摸索,但这种方法绝对可行,也不难掌握。
快乐鹦鹉
2004-04-19
打赏
举报
回复
我这儿正好有例子。你留下信箱。
软考高项论文50
分
秘籍——心法篇
讲师以52
分
和53
分
通过论文,2次
高
分
通过,方法论经得起考验
IDL学习——
调用
enviTask对
高
分
2号影像进行预处理
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 注:该程序是在ENVI5.3+IDL8.5
中
进行,而ENVI5.3不支持国产卫星的打开,可到ENVI官网上下载envi_china_satellites_support该扩展工具进行打开与处理。 本实例实现利用IDL
调用
ENVITask实现
高
分
2号影像的预处理。
高
分
2号的预处理流程是...
编写
VB
打印控制程序
1.简介Visual Basic(
VB
)给用户提供了可视化编程环境,因其简单易学、功能强大而得到了广泛的应用。
VB
提供了两种实现打印的方法。一般在对打印质量要求不高的场合,或者是编程项目的早期开发过程
中
,可以直接使用
VB
窗体的Printform方法实现打印。用这种方法实现打印具有编程简单、易用并且功能强大的优点,它只需要通过一行代码,几乎能打印所有内容。实现的方法就是:首先将要打印的内容在屏幕上显
计算机丢失oleaut32
dll
,无法启动文件OLEAUT32.
DLL
无法启动文件OLEAUT32.
DLL
启动所有的文件都出现这样的提示 是个老电脑,98系统愿意出
高
分
悬赏哦 !更新时间:2019-10-23 09:39最满意答案这种情况多数是IE的动态链接库文件oleaut32.
dll
损坏所造成的,重新注册这个文件即可。点击“开始→运行”,输入“regsvr32 oleaut32.
dll
”后回车,重新注册该文件,出现
一个
对话框,点“确定”。如果还不行,重启一下电脑...
Unity C#代码封装
dll
文件完美教程(Chinar-开发者必经之路)
Unity C#代码封装
dll
文件完美教程(Chinar-开发者必经之路) 将脚本封装为
DLL
库,本文提供全流程,
中
文翻译。 助力快速完成 Unity C#脚本文件封装为
DLL
库文件
DLL
(Dynamic Link Library) ——
中
文:动态链接库 以 Visual Studio 2017 为例 打开 VS 2017 新建
一个
项目:文件→→新建→→项目 有我们需要通过
dll
调用
的函数,都需要设为 公有(public static)
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章