VB调用C程序的方法—动态链接库法
pb调用vc写的动态链接库文件
pb调用vc写的动态链接库文件pb调用vc写的动态链接库文件;PB是一种面向C/S方式的数据库应用程序的开发工;动态链接库简述;动态链接库(Dynamic-LinkLibrar;1.DLL的动态连接不是将库代码拷贝,而是在程序;2.DLL是基于Windows系统的程序模块,不;3.对于一个大型的、不断更新的应用程序,可将许多;4.DLL丰富了Power Script语言的编程;5.DLL独pb调用vc写的动态链接库文件PB是一种面向C/S方式的数据库应用程序的开发工具,PB拥有数据窗口、嵌入式SQL语句等技术,在开发数据库应用程序时显得特别方便。
但在涉及到系统底层的一些功能时,PB本身提供的功能就有些不尽如人意。
因为Windows 操作系统提供给用户的接口是C语言函数形式,而VC在调用系统底层功能方面,从编程角度来讲就要方便得多。
VC还有许多PB所不具备的优点,比如数据结构表达能力强,实现复杂算法的程序相对容易开发,运行速度快等。
此外,不少外围设备的驱动程序提供的也是C接口。
若能将这两种语言结合起来使用,充分发挥它们各自的优点,将会大大提高开发效率、增强应用程序的功能。
动态链接库简述动态链接库(Dynamic-Link Library)简称DLL,是基于Windows 系统的程序设计中的一个非常重要的组成部分。
使用DLL的优点是:1. DLL的动态连接不是将库代码拷贝,而是在程序中记录函数的入口点和接口,在程序执行时才将库代码装入内存。
如果有多个程序使用相同的DLL,也只需将DLL在内存中装载一次,以节省内存的开销。
2. DLL是基于Windows系统的程序模块,不仅包含可执行代码,还可包含数据与各种资源,扩大了库文件的使用范围。
3. 对于一个大型的、不断更新的应用程序,可将许多重复的功能编写成DL L,用主程序调用,这样既能减少开发的工作量,又能提高访问速度。
4. DLL丰富了PowerScript语言的编程能力,可以使用PowerScript函数集之外的函数。
VB调用C程序DLL的一种方法
VB调用C程序DLL的一种方法
吴江滨
【期刊名称】《武汉纺织大学学报》
【年(卷),期】2005(018)003
【摘要】本文提出了一种实现VB调用C语言程序的方法,给出了动态链接库DLL 制作的一般框架,并通过实例描述了DLL制做方法、编程步骤.
【总页数】4页(P37-40)
【作者】吴江滨
【作者单位】武汉科技学院,外经贸学院,湖北,武汉,430073
【正文语种】中文
【中图分类】TP311
【相关文献】
1.VB调用VC创建的DLL及在控制领域中的应用 [J], 薛燕红
2.实现VB调用C程序动态链接库的方法 [J], 顾莉
3.一种64位进程调用32位DLL的方法 [J], 曹子建;容晓峰;刘宝龙
4.DLL在Visual Basic程序调用MATLAB库函数中的应用 [J], 李小文;屠宇;梁慧冰
5.VB调用DLL的方法和实例 [J], 方明伦;王建涛
因版权原因,仅展示原文概要,查看原文内容请购买。
VB, VC, CSharp混合编程-动态库相互调用
如何在VS2008下开发跨开发平台的程序为继承和使用在不同开发平台(VC++6.0, C++Builder, , C#.NET, )下的已有代码和程序,允许多开发人员合作且分工开发,允许各开发人员使用自己擅长的开发平台,但最终会集合到VS2008开发环境中,这需要在VS2008开发环境下,能够实现代码或程序的共享。
为跨平台/多人员协作模式提供良好的途径,是大型软件开发之必需。
变量类型对照表.xls1.VC++.NET 如何生成VC++ Win32 DLL (*.dll)VC++ Win32 DLL即VC++6.0环境下的DLL。
●File->New Project…●Other Languages->Visual C++->Win32 Project,在Name框内输入Win32 DLL名称,比如“DLLTray”->OK●Next选择DLL->Finish。
一个动态库框架形成。
●为确保能被外部程序调用,VC动态库函数需要设置成__stdcall。
头文件(*.h)中加入该函数的声明语句(DLLTray.h)。
#include<windows.h>int__declspec (dllexport) __stdcall SearchNum_Win32(int number);●可执行文件(*.cpp)中加入执行实现代码(DLLTray.cpp)int__declspec (dllexport) __stdcall SearchNum_Win32(int number){return number + 10;}●Def文件中加入(DLLTray.def)LIBRARY "DLLTray"EX PORTSSearchNum_Win32DLLTray.DLL源代码-2.如何生成,C#.NET,VC++.NET可执行程序(*.exe)或类库(*.dll)File->New Project…->Windows Forms Application (or Class Library, Console Application)3.如何调用Windows API或VC++ Win32 DLL在的可执行程序里重新声明该函数,声明后即可作为自己的函数进行调用。
vs2010创建和使用动态链接库(dll)
vs2010创建和使用动态链接库(dll)1、打开Microsoft Visual Studio 2010,选择File->New->Project。
2、在New Project中选择Installed Templates->VisualC++->Win32。
3、选择Win32 Console Application,设置名称:simpledll,设置解决方案名:zdddll。
4、单击OK,在出现的Win32 Application Wizard的Overview 对话框中点击Next。
5、在Application Settings中,选择Application type下的DLL。
6、勾选Additional options下的Empty project。
7、单击Finish创建项目。
向动态链接库添加类:1、添加新类头文件。
右键单击simpledll项目,Add->New Item,选择Header File(.h),设置名称为simpledll,单击Add。
2、添加新类源文件。
右键单击simpledll项目,Add->New Item,选择C++ File(.cpp),设置名称为simpledll,单击Add。
3、为新类添加内容。
内容如下:头文件simpledll.h:[html] view plain copy print?//------------------ simpledll.h---------------- #pragma once; //该宏完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入//宏DLL_IMPLEMENT在simpledll.cpp中定义#ifdef DLL_IMPLEMENT #define DLL_API __declspec(dllexport) #else #define DLL_API__declspec(dllimport) #endif namespace zdd { //导出类class DLL_API SimpleDll { public: SimpleDll(); ~SimpleDll(); int add(int x, int y); //简单方法}; }源文件simpledll.cpp:[cpp] view plain copy print?//------------------ simpledll.cpp---------------- //注意此处的宏定义需要写在#include "simpledll.h"之前//以完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入#define DLL_IMPLEMENT#include "simpledll.h" namespace zdd{ SimpleDll::SimpleDll() { } SimpleDll::~SimpleDll() { } intSimpleDll::add(int x, int y) { returnx+y; } } 4、完成后点击Build->Build Solution,生成解决方案。
在VB6中调用动态连接库教程(转载)
在VB6中调⽤动态连接库教程(转载)作为⼀种简单易⽤的Windows开发环境,Visual Basic从⼀推出就受到了⼴⼤编程⼈员的欢迎。
它使 程序员不必再直接⾯对纷繁复杂的Windows消息,⽽可以将精⼒主要集中在程序功能的实现上,⼤⼤提⾼了编程效率。
但凡事有利必有弊。
VB中⾼度的封装和模块化减轻了编程者的负担,同时也使开发⼈员失去了许多访问低层API函数和直接与Windows交互的机会。
因此,相⽐⽽⾔,VB应⽤程序的执⾏效率和功能⽐C/C++或Delphi⽣成的程序要差。
为了解决这个问题,在⼀个⼤型的VB开发应⽤中,直接调⽤Windows API函数⼏乎是不可避免的;同时,还有可能需 要程序员⾃⼰⽤C/C++等开发⼀些动态连接库,⽤于在VB中调⽤。
本⽂主要讨论在32位开发环 境Visual Basic 5.0中直接调⽤Windows 95 API函数或⽤户⽣成的32位动态连接库的⽅法 与规则。
Windows动态连接库是包含数据和函数的模块,可以被其它可执⾏⽂件(EXE、DLL、OCX 等)调⽤。
动态连接库包含两种函数:输出(exported)函数和内部(internal)函数。
输出函数可以被其它模块调⽤,⽽内部函数则只能在动态连接库内部使⽤。
尽管动态连接库也能输出 数据,但实际上它的数据通常是只在内部使⽤的。
使⽤动态连接库的优点是显⽽易见的。
将应 ⽤程序的⼀部分功能提取出来做成动态连接库,不但减⼩了主应⽤程序的⼤⼩,提⾼了程序 运⾏效率,还使它更加易于升级。
多个应⽤程序共享⼀个动态连接库还能有效地节省系统资 源。
正因为如此,在Windows系统中,动态连接库得到了⼤量的使⽤。
⼀般来说,动态连接库都是以DLL为扩展名的⽂件,如Kernel32.dll、commdlg.dll等。
但也有例外,如16位Windows的核⼼部件之⼀GDI.exe其实也是⼀个动态库。
编写动态连接库的⼯具很多,如VisualC++、BorlandC++、Delphi等,具体⽅法可以参见相关⽂档。
VB调用C程序的方法
VB调用C程序的方法—动态链接库法文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有普遍的意义。
关键词VB 动态连接库DLL C程序一、引言Visual Basic( 以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广大WINDOWS程序员的青睐。
利用VB开发界面友好、操作方便的软件只需很短的时间。
但是VB运行速度较慢,对于庞大的科学计算问题,VB的这种慢速会使人难以忍受。
C语言是国际上非常流行的一种中级编程语言,以其灵活、高效等优点而获得广泛应用,许多的应用程序都是用C语言在DOS环境下编写而成。
那么如何发挥VB和C这两种语言的优势,用VB设计一种良好的for windows界面来调用C语言程序,即实现VB调用C 语言程序呢?现有的文献只提到动态链接库(以下简称DLL)可以将这两种语言连接起来,但有讲动态链接库DLL的制做及其编程方法。
本文详细介绍了Borland C环境下制作动态链接库以及VB调用for dos动态链接库的的方法、步骤,并通过实例描述VB调用C程序的全过程。
二、用Borland C编写DLL程序的方法要想实现VB调用C程序,首先需要用Borland C编写动态连接库DLL程序(假设DLL程序取名为example)。
动态链接库包含四个文件:C语言源程序(.C)、模块定义文件(.DEF)、原型函数文件(.H)和工程文件(.PRJ)。
下面分别详细介绍一下这四种文件的具体结构。
1、编写C语言源程序的框架:C语言源程序(example.C),它包括三种函数:入口函数、输出函数和终止函数。
其具体结构如下:/*************************************//* 文件名:example.C *//*************************************/#include <windows.h>/***********入口函数***********/int FAR PASCAL LibMain ( HANDLE hInstance,WORD wDataSeg,WORD cbHeapSize,LPSTR lpszCmdLine ){if (cbHeapSize!=0)UnlockData(0);return (1);}/***********输出函数***********/int FAR PASCAL example(int param1,...,char param n){...... /*C语言应用程序*/}/***********终止函数***********/int FAR PASCAL WEP ( int /*SystemExit*/ ){return(1);}以上各组成部分参数的含义:Windows.h头文件,它包含有数据类型的定义、API入口点定义和其它有用的参数信息。
(完整版)vb调用vc的DLL
4.1 新建工程打开在VC++6.0,new 一个Win32-Dynamic-Link Library 工程dlltest4.2 在工程中添加代码4.2.1 添加lib.h 文件:#ifndef _LIB_H_ #define _LIB_H_ extern “ C” int__stdcall add(int,int) ;extern “ C” int __stdcall sub(int,int) ;/*__stdcall 约定如果通过VC++ 编写的DLL 欲被其他语言编写的程序调用,应将函数的调用方式声明为__stdcall 方式,WINAPI都采用这种方式,而C/C++缺省的调用方式却为__cdecl。
__stdcall 方式与__cdecl 对函数名最终生成符号的方式不同*/ #endif4.2.2 添加lib.cpp 文件:#include “ lib.h ”int __stdcall add(int a,int b) {return a+b ;}int __stdcall sub(int a,int b) {return a-b ;}4.2.3 添加lib.def 文件:右击SOURCE FIL E录,添加一个文本文件(不能是word文档,一般是txt 格式的),将文档重命名为lib.def ,点击打开该文档。
在文档中输入代码:LILBRARY dlltestEXPORTSadd @ 1sub @ 2说明:DLL函数的导出有两种方式。
一种是显式导出:在.h 文件中在函数声明前加入如下语句:__declspec(dllexport) 。
使用该方法是不用添加.def 文档的。
该方法导出的函数,只能被C或C++调用,不能被其他语言调用。
一种是隐式导出:就是在SOURCE FIL目录中添加一个.def文档,在该文档中写入要导出函数的代码。
.def 语法规定注释用分号(;), 且注释不能与代码共享一行,代码说明如下:LIBRARY dlltest;该语句说明了相应的DLL工程。
利用动态链接库实现C++与VB的混合编程
使得 Vsa B s 在访问注册表、 问数据库等操作 i l ai u c 访
上很 方便 , 比于 其 他语 言 来 说 , Vsa B s 相 用 i l ai u c编 界面 的时 间和代 码耗 费都是 很小 的 。 各 种工 具都 有其 适 宜 解 决 的 问题 , 识 到两 种 认 语言不 同 的优 点 后 , 易 想 到 , 两 种 语 言 结 合 起 容 将 来, 进行 优势 互补 , 以最 小 的代码量 、 简单 的方法 、 最 最 短 的时 间来编写 出所 需 要 的程 序 , 就是 用 最 高 也
u i g d n mi i k l rr . a t h r e e a lsw i h a p y te me o si t d c d b i a il a sn y a c l i a y At s ,t e x mp e h c p l t d r u e y t s r ce w s n b l h h n o h t
d n m i i k l a y y a c l i r n br
Z U H u — io H iq a ( o tw s Ja tn nvri , h n d 10 1 h a S uh et ioo gU ies y C eg u6 0 3 ,C i ) t n
Absr c : C + a d Viu lBa i r h s o u a r g a ta t + n s a sc a e t e mo tp p l rp o r mmi g ln ua e a r s n ,e c ne h s n a g g tp e e t a h o a d fe e tme t F rty,h s atc e e p u d he p r o e a d a v n a e o e d pr ga ifr n r . isl t i ril x o n s t u p s n d a t g fbln o r mmi d s rb s i ng, e c e i t e ne e st fb e r g a h c s i o lnd p r mmi g,h n i r d e o c ee me o o i lme tb e d p o r mmi g b y o n t e nto uc sc n r t t d t mp e n ln r g a h n y
VB调用C程序的方法—动态链接库法
VB调用C程序的方法—动态链接库法内容预览:文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有普遍的意义。
关键词 VB 动态连接库DLL C程序一、引言 Visual Basic( 以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广大WINDOWS程序员的青睐。
利用VB开发界面友好、操作方便的软件只需很短的时间。
但是VB运行速度较慢,对于庞大的科学计算问题,VB的这种慢速会使人难以忍受。
C语言是国际上非常流行的一种中级编程语言,以其灵活、高效等优点而获得广泛应用,许多的应用程序都是用C语言在DOS 环境下编写而成。
那么如何发挥VB和C这两种语言的优势,用VB设计一种良好的for windows界面来调用C语言程序,即实现VB调用C语言程序呢?现有的文献只提到动态链接库(以下简称DLL)可以将这两种语言连接起来,但有讲动态链接库DLL的制做及其编程方法……如果你已经成为会员查看文章请点此登录吧!本文为收费公文,以下四种方式可以获得权限:内容预览:文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有普遍的意义。
关键词 VB 动态连接库DLL C程序一、引言 Visual Basic( 以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广大WINDOWS程序员的青睐。
利用VB开发界面友好、操作方便的软件只需很短的时间。
但是VB运行速度较慢,对于庞大的科学计算问题,VB的这种慢速会使人难以忍受。
C语言是国际上非常流行的一种中级编程语言,以其灵活、高效等优点而获得广泛应用,许多的应用程序都是用C语言在DOS 环境下编写而成。
那么如何发挥VB和C这两种语言的优势,用VB设计一种良好的for windows界面来调用C语言程序,即实现VB调用C语言程序呢?现有的文献只提到动态链接库(以下简称DLL)可以将这两种语言连接起来,但有讲动态链接库DLL的制做及其编程方法……如果你已经成为会员查看文章请点此登录吧!本文为收费公文,以下四种方式可以获得权限:。
一步一步教你用VC和VB调用C++ DLL
#include "stdafx.h" #include "TestExe.h" #include "TestExeDlg.h" #include "Test.h" . . .
// <=== ADD THIS LINE
第六步
如果你想赶时间做一个演示的话, 你可能会尝试只是拷贝 DLL 的 test.h 到你的项目目录里
extern TEST_API int nTest;
TEST_API int fnTest(void);
这里面发生了什么? #ifdef TEST_EXPORTS 是什么意思? TEST_EXPORTS 又是在哪定义
的? TEST_EXPORTS 如果被定义, 那么 TEST_API 将会被定义为 __declspec(dllexport) (DLL 导 出), 否则,将会被定义为__declspec(dllimport)(DLL 导入). 这将影响到后边定义的 Ctest 类是导出类还是导入类. 这意味着如果我们需要导出的时候,我们就得定义 TEST_EXPORTS. 当一个 VC++应用程序要访问这个 DLL 的时候,可以将 Test.lib 链接进去,它包含了 DLL 的导 出符号.
Step by Step: Calling C++ DLLs from VC++ and VB
一步一步教你用 VC 和 VB 调用 C++ DLL.
本系列教程讨论了普通情况下 4 种使用 DLL 的方法
Part 1
从 VC++应用程序调用 C++ DLL 的函数 从 VC++应用程序调用 C++ DLL 的类
在VB中用动态链接库技术实现工程数据的采集
文 章 编 号 :0 8 1 4 ( 0 2 0 — 0 8 O l 0 —5 2 2 0 ) 3 0 6 一 4
在 VB 中用 动 态 链 接 库 技 术 实 现
工 程 数 据 的 采 集
黄 风 山 , 惠 芬 , 忆 湘 , 文 学 钱 方 刘
( 河北 科 技 大 学机 械 电子 工程 学 院 , 北石源自家 庄 河 005 ) 5 0 4
关 键 词 : 态链 接 库 ; 据 采 集 ; 算 机 外 设 ; 台 动 数 计 平
中图 分 类 号 : 9 . 2 TG 6 9 TP 3 1 7 ; 5
文献标识码 : A
随 着 W id ws操 作 系 统 的 普 遍 推 广 , 别 是 Wid ws 5 W id ws 8 W id ws 0 0的 相 no 特 no 9 , n o 9 , no 20 继 推 出 , 程 设 计 人 员 纷 纷 使 用 VC, 工 VB 等计 算 机语 言 在 W id ws 作 系 统 下 开 发 相 应 的 工 程 no 操
维普资讯
河 第 2 3卷
总第 6 2期
北
科
技
大
学
学
报
Vo1 23 N o.3 . Sum 20 62 02
第 3期
20 0 2年
j oU RNAL OF HEB NI EIU VERS TY I OF
SC I EN CE N D A TE CH N 0 L0 G Y
摘 要 : 出 在 VC 中创 建 动 态 链 接 库 和 在 VB 中 调 用 该 动 态 链 接 库 对 计 算 机 外 设 进 提
行 读 、 操 作 的 函 数 实 现 工 程 数 据 采 集 的 方 法 , 用 该 方 法 可 提 高 工 程 数 据 采 集 软 件 的 写 使
将动态链接库文件添加到VC程序中
将动态链接库文件添加到VC程序中应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。
在使用DLL之前首先要知道DLL中函数的结构信息。
Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin.exe的小程序,用它可以查看DLL文件中的函数结构。
另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作目录,3.Windows系统目录,4.Windows目录,5.列在Path环境变量中的一系列目录。
(一)隐式链接隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。
实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。
下面的例子通过隐式链接调用MyDll.dll库中的Min函数。
首先生成一个项目为TestDll,在DllTest.h、DllTest.cpp文件中分别输入如下代码://Dlltest.h#pragma comment(lib,"MyDll.lib")extern "C"_declspec(dllimport) int Max(int a,int b);extern "C"_declspec(dllimport) int Min(int a,int b);//TestDll.cpp#include<stdio.h>#include"Dlltest.h"void main(){int a;a=min(8,10)printf("比较的结果为%d\n",a);}在创建DllT est.exe文件之前,要先将MyDll.dll和MyDll.lib拷贝到当前工程所在的目录下面,也可以拷贝到windows的System目录下。
如果DLL使用的是def文件,要删除T estDll.h文件中关键字extern "C"。
VB调用C程序的方法动态链接库法1000字
VB调用C程序的方法动态链接库法
VB(Visual Basic)和C(C语言)是两种不同的编程语言,两
者的编译和语言规则不同,但是它们之间是可以相互调用的。
在VB
程序中,可以通过调用C程序实现更加复杂的功能。
方法一:动态链接库
动态链接库(Dynamic Link Library,简称DLL)是一种可以
被多个程序共享的程序库,它可以为不同的程序提供相同的功能,
这意味着它可以被VB程序以及其他程序调用。
VB程序可以使用Windows API来加载和调用DLL文件中的函数,而C程序可以通过
导入、导出关键字来将函数导出为DLL文件中的函数,从而被VB程
序调用。
在VB程序中,调用C程序所在的DLL文件中的函数,步骤如下:
1. 在VB程序中进行声明,指定要调用的函数名、返回类型和
传入参数。
例如:
```
Declare Function MyFunction Lib \
1。
如何用VC编写DLL动态链接库文件
如何用VC编写DLL动态链接库文件作者: falcon 发表日期: 2006-04-24 14:51引言前不久刚学会了如何用VB编写DLL动态链接库,但是用vb编写动态链接库比较麻烦些。
下面我们再学习一下如何用vc编写dll动态链接库,并且通过vc或者vb调用正文这里主要介绍两个东东第一:用vc编写动态链接库,用vc调用第二:用vb编写动态链接库,用vb调用一、用vc编写动态链接库,用vc调用1、创建DLL文件,命名为FIRSTDLL1)打开visual c++ 6.0通过new创建一个win30 Dynamic-link Libary的工程,命名为FIRSTDLL2)接着选择最后一个选项,让系统帮我们创建一些必要的文件3)把FIRSTDLL.cpp用下面的代码覆盖Code:[Ctrl+A Select All]4)接着我们在FIRSTDLL.h头文件里头用下面的代码覆盖Code:[Ctrl+A Select All]5)好拉,我们现在可以编译FIRSTDLL.cpp文件拉,到debug目录下看看,是不是已经生成拉我们需要的FIRSTDLL.dll拉2、通过vb编写一个函数来调用该DLL,该函数为USEFIRSTDLL1)同样通过new创建一个工程,该工程为win30 application,命名USEFIRSTDLL2)在USEFIRSTDLL.cpp文件中用如下代码覆盖Code:[Ctrl+A Select All]好拉,到这里第一部分介绍完拉下面介绍第二部分二、用vc编写动态链接库,用vb调用在介绍这个之前必须声明的是(引用自下面的参考资料)一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一个是必须是export的。
要做到第一条,只须在函数声明前加上__stdcall关键字。
如:short __stdcall sample(short nLen, short *buffer)要做到第二条,需要在*.def文件中加上如下的几行:EXPORTSsample @1这里的sample是你要在VB中调用的函数名,@1表示该函数在DLL中的编号,每个函数都不一样。
在VC实现可在VB中调用的DLL
a = Compare(1, 2)
MsgBox a
End Sub
是不是很简单呢~,呵呵,因为这只是一个测试用的工程,所以我用了最简单的表达方式,本来想写一个运算量大些的函数的,无奈自己实在想不起来什么东西了,抱歉,当然大家看完会问为什么要这样做,为什么这样写的问题,不要着急,我把在VC写DLL需要看和注意的东西都放到下面了,这些都是我在学习写DLL的时候从网络中找到的资料,希望对大家也有帮助:)
如dll要输出如下两个函数:
extern "C" _declspec(dllexport) int _stdcall GetInt(char* name);
extern "C" _declspec(dllexport) char* _stdcall GetStr(int id);
则def文件书写如下(TEST为工程名):
2.文件--新建 新建三个文件 TextDll.cpp(C++代码文件)
TextDll.h(C++头文件)
TextDll.def(模块定义文件,这个文件我是新建的文本文件,在文件名的 地方直接写的TextDll.def,当然你也可以在菜单 工程--增加到工程--文 件 处添加也可以)
3.代码
TextDll.h:
#ifdef __cplusplus
extern "C" {
#endif
__stdcall int CALLBACK Compare (int, int) ;
#ifdef __cplusplus
}
#endif
TextDll.cpp:
VB调用VC创建的DLL及在控制领域中的应用
1 动态链 接库 ( L ) 述 DL概
1 1 动 态链 接 与静 态连接 .
动 态链 接 是相 对 于静 态 连接 而 言 的 ,我 们 通 常讲
的静 态 连 接 是 指 在应 用 程 序 的 编 译 期把 需 要 的过 程 或 函 数 链 接 到 可 执 行 文 件 中 , 成 为 可 执 行 文 件 的 一 部
K e o d : L VB; C+ : al yw r s DL ; V +C l
O 引 言
V S a B i ( iu l a C V S B)是当今应 用最广泛 的编 程语 言 之 一 , 是一 种可 视 化 的软 件 开发 工 具 .自面 世 以来 ,
倍 受 广 大 编 程 人 员 的青 } 但 与其 它 任 何 一 种 语 言 一 崃。
A b t a t Vi a sci p weflh we e,t a on tigi i t gteb t m ad r f o ue. sr c: s l u Ba i s o ru, o v ri c nd ohn nvs i ot h rwaeo c mp tr in h o a
Be a s c u eVC++ h st ef n t fa s m b i a g g n d a c dl n u ge t a o to h a d aedie t a h u c i o se on l ngl n ua ea d a v n e a g a i c n c n r l eh r w r r c l t y, Th r f r . e e o e VC++ c nb s d t e e aeaDLL h tic u e omef n to sc n e nn ec n r eh r wa e a eu e o g n rt t a n l d ss u ci n o c r i g t o tol t a d r . h of h Th n i e nVB o r m ,he ef c i sc n b al d t onr l h a d r n o d c h e f r a c f B t t pr g a t s un t on a ec l o c to eh r wa ea dc n u t ep ro m n eo o i e t t V .
VB调用C程序的方法―动态链接库法
VB调用C程序的方法―动态链接库法【摘要】本文将介绍VB调用C程序的方法―动态链接库法。
我们将解释动态链接库的概念以及如何在VB中使用动态链接库调用C程序。
接着我们会详细讲解如何创建动态链接库和在VB中调用动态链接库的步骤。
在最后的注意事项中,我们将强调一些需要注意的细节和技巧。
结论部分将强调VB调用C程序的方法的重要性,并讨论未来的发展方向。
通过本文,读者将了解如何利用动态链接库实现VB和C程序之间的无缝衔接,为软件开发提供更多可能性。
VB调用C程序的方法―动态链接库法在软件开发中扮演着重要的角色,其未来发展方向也值得我们深入探讨。
【关键词】VB调用C程序、动态链接库、概念、使用、创建、调用、注意事项、重要性、未来发展方向1. 引言1.1 VB调用C程序的方法―动态链接库法VB调用C程序的方法―动态链接库法是一种常见且高效的方法,用于实现不同编程语言之间的互操作性。
动态链接库(Dynamic Link Library,简称DLL)是一种共享库,其中包含了可被程序动态调用的函数和资源。
在VB中调用C程序,可以通过创建动态链接库来实现。
首先需要编写一个C程序,并将其编译为动态链接库。
然后在VB中通过声明函数的方式引用这个动态链接库,就可以直接调用其中的函数了。
这样可以充分利用C程序的高性能和灵活性,实现与VB的无缝集成。
需要注意的是,在使用动态链接库时要确保函数的参数和返回值的类型与VB中的数据类型兼容。
要避免内存泄漏等问题,需要注意内存的分配和释放。
VB调用C程序的方法―动态链接库法对于提高程序的性能和扩展功能具有重要意义。
未来可以进一步完善这种方法,提供更加方便快捷的方式实现跨语言调用,促进不同语言之间的交流和合作。
VB调用C 程序的方法―动态链接库法将在跨平台开发和系统集成方面发挥越来越重要的作用。
2. 正文2.1 动态链接库的概念动态链接库(Dynamic Link Library,简称DLL)是一种可被多个程序同时使用的程序代码和数据的集合,它可以在运行时被载入内存,并由多个进程共享。
分享如何在VB中调用VC编写的DLL
分享如何在VB中调⽤VC编写的DLL⼀般来说,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⽂件中加上如下的⼏⾏:EXPORTSsample @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的名字。
VisualBasic中动态链接库的使用
Visual Basic中动态链接库的使用白古勒齐 轩兴涛(呼和浩特市职工大学)(内蒙古建材工业学校) 摘 要 该文介绍了在VB如何使用动态链接库(DLL),使用DLL时调用不同类型参数的声明方法,不同类型VB数据的DLL接收不同方式,VB中数组的DLL操作方法及过程。
关键词 Visual Basic 动态链接库(DLL) 动态链接库(Dy namic Link Libraries,简称DLL)是Microsoft Windo ws的重要特点之一。
程序设计人员利用它可以实现应用程序共享代码和资源,这不但可以提高程序的编写效率,而且可以在多任务环境下大大提高程序的执行效率。
DLL 的最大优点是:1.由于DLL与用户程序分开,用户可以更新DLL而不用更改已编译过的EXE文件。
2.DLL使得我们能够把用C语言编制的数据处理代码动态地链接到用VB开发的应用程序中去,从而可以极大地增强VB的数据处理能力。
1 在VB中使用DLL1.1 声明要使用的DLL子程序要使用的DLL子程序,可以在全局模块(Global Mo dule)中或表格阶层的声明部分(Dec-laratio n Section)中声明。
例1:Private Declare Function OpenProcess Lib “kernel32”(By Valdw DesiredAccess As Lo ng, By Val BinheritHandle A s Long,By Val dw Pro-cessId A s Lo ng)As LongPrivate Declare Functio n CloseHandle Lib “kernel32”(By Val hObject As Long)As Long 1.2 执行DLL子程序同通用函数的执行方式例2:Ret Val=Shell(“C:/WINDOWS/CALC. EXE”,vbNorm alFo cus)2 VB中各种参数的声明从上面的例如1中我们看出,在VB中声明DLL子程序时,函数参数的声明是一项很重要的内容。
VB6.0调用C#.NET(VS2010)DLL的实现方法
//实现IDate接口
[Guid("B3F6343F-F783-4C24-BC1E-1ADC3C1058B3")]
public class Date:IDate
{ //得到现在的年份
必须实现 IDate 定义的接口
public string GetYear()
{
return DateTime.Now.Year.ToString();
}
Байду номын сангаас
//得到现在的月份
public string GetMonth()
{
return DateTime.Now.Month.ToString();
}
//得到现在的是第几号
public string GetDay()
{
return DateTime.Now.Day.ToString();
}
}
1
//定义ITime接口 [Guid("A1EC9AC1-3921-47AF-BB6C-5485077F2E43")] public interface ITime {
string GetHour(); string GetMinute(); string GetSecond(); string GetMillisecond(); }
//实现ITime接口 [Guid("2B23AF9E-9DFC-4AD1-A6C5-09BF0ED76AB9")] public class Time : ITime {
图 10
但类(Date)定义的却 没有显示其成员,没 有显示成品对其使 用没有造成干扰
图 11
18) 如图12,在Form1窗体上摆放一个Label1控件、Button1控件与Timer1 控件,将Label1的Caption属性设置为“1900-01-01 00:00:01”,将 Button1的Caption属性设置为“显示日期及时间”,将Timer1的Enabled 设置为False,Interval设置为100;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE SINGLE
HEAPSIZE 1024
EXPORTS
ADD @1
WEP @2
(3)ADD.H程序清单:
/*************************************/
}
2)ADD.DEF文件的程序清单:
/*************************************/
/* 文件名: ADD.H */
/*************************************/
LIBRARY ADD
DESCRIPTION 'ADD.DLL'
的名字、DEF中的DLL的文件名相一致。DESCRIPTION语句采用一个字符串,其长度可达
128 个字符,通常用它来保存模块描述的信息。EXETYPE windows语句每个windows应用程
序和 DLL都需要。DATA语句定义该库数据段的内存属性,关键字MOVEABLE允许内存管
理程序在 必要时移动内存段,关键字SINGLE是DLL必要,因为DLL总是有一个单一数据段,
相加,返回它们的和。设该DLL程序的名字为ADD。
第一步:在Borland C++环境下编辑.C文件、.DEF文件和.H文件,并建立.PRJ文件。如
(1)编写C语言源程序清单:
/*************************************/
/* 文件名: ADD.C */
/*************************************/
制作好DLL之后,就可以用VB调用它,实现VB调用C程序。VB程序要使用DLL中的函
数, 首先必须要有特殊的声明,用Declare声明语句在窗体级或模块级或全局模块的代码
声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。
语句格式为:Declare Sub 过程名Lib摽鈹黚_n[ Alias " 别名]([ByVal 参数AS类型]),
(注意:DLL外部传送的指针必须是远指针FAR)。LibMain带四个参数:
hInstance、 wDataSeg、cbHeapSize和lpszCmdLine。第一个参数hInstance是DLL事例句
柄, wDataSeg参数是数据段(DS)寄存器值,cbHeapSize参数是在模块定义文件中定义
2、模块定义文件(.DEF)的结构和各段的意义
模块定义文件的结构如下:
/*************************************/
/* 文件名: example.DEF */
/*************************************/
LIBRARY example /* DLLname */
或为Declare Function函数名Lib摽鈹黚_衃 Alias " 别名]([ByVal 参数AS类型])AS
类型在声明中首先用Declare关键字表示声明DLL中的函数。在C语言中有的函数类型为
VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。有的函数具有返回
值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明
等特点,深受广大WINDOWS程序员的青睐。利用VB开发界面友好、操作方便的软件只需
很短的时间。但是VB运行速度较慢,对于庞大的科学计算问题,VB的这种慢速会使人难
以忍受。C语言是国际上非常流行的一种中级编程语言,以其灵活、高效等优点而获得广
泛应用,许多的应用程序都是用C语言在DOS环境下编写而成。那么如何发挥VB和C这两
种语言的优势,用VB设计一种良好的for windows界面来调用C语言程序,即实现VB调用C
语言程序呢?现有的文献只提到动态链接库(以下简称DLL)可以将这两种语言连接起来,
但有讲动态链接库DLL的制做及其编程方法。本文详细介绍了Borland C环境下制作动态链
接库以及VB调用for dos动态链接库的的方法、步骤,并通过实例描述VB调用C程序的全过
/*************************************/
/* 文件名: example.H */
/*************************************/
extern "C" int _export FAR PASCAL example(int param1,...,char param n) ;
#include <iostream.h> #incluຫໍສະໝຸດ e <conio.h>
#include <io.h>
#include <alloc.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
#include <stdio.h>
程。
二、用Borland C编写DLL程序的方法
要想实现VB调用C程序,首先需要用Borland C编写动态连接库DLL程序(假设DLL程序
取名为example)。动态链接库包含四个文件:C语言源程序(.C)、模块定义文件
(.DEF)、原型函数文件(.H)和工程文件(.PRJ)。下面分别详细介绍一下这四种文件
摘 要
文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制
作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有
普遍的意义。
关键词 VB 动态连接库DLL C程序
一、引言
Visual Basic( 以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷
这个信息建立一个序数入口值,序数入口值是一个优化的值,允许动态连接机制更快块操
作且使用较少的内存。
一般来说,模块定义文件(.DEF)的结构除取动态库的名字不同外,其它结构都是固定
的。
3.建立原形函数文件(.H)
原形函数的功能是进一步声明调用函数的函数名和传递的参数,其形式为:
#include "c:\ADD.h"
/*入口函数*/
int FAR PASCAL LibMain (HANDLE hInstance ,
WORD wDataSeg ,
WORD cbHeapSize,
LPSTR lpszCmdLine )
{
if (cbHeapSize!=0)
UnlockData(0);
函数返回值的类型。
例如上面的ADD.DLL在VB中就可以声明为:
Declare Function ADD Lib撫c:\ADD.dll敚―ByVal X AS Integer, ByVal Y AS Integer ,ByVal filein as string)AS Integer
#include <windows.h>
/***********入口函数***********/
int FAR PASCAL LibMain ( HANDLE hInstance,
WORD wDataSeg,
WORD cbHeapSize,
LPSTR lpszCmdLine )
{
if (cbHeapSize!=0)
return 1;
}
/*输出函数*/
int FAR PASCAL ADD(int x,int y,char *filein)
{ int a,b;
fp=fopen(filein,"r");
if(fp==NULL) { exit(0);}
int temp1=0,temp2=0;
fscanf(fp,"%d",&a);
的堆的大小,LibMain 使用该值使本地堆初始化。lpszCmdLine参数包括命令行信息,但
很少被DLL使用。一般来说,这四个参数是制作DLL通用的参数。
如果不想让DLL数据被封住,那么必须调用unlockdata恢复正常的非锁状态,如果DLL初始
化已经成功,DLL则返回1,若不成功则返回0值,且 DLL退出系统。
fscanf(fp,"%d",&b);
temp1=x+a;
temp2=y+b;
temp1=temp1+temp2;
fclose(fp);
return(temp1);
}
/*退出函数*/
int FAR PASCAL WEP ( int/*SystemExit*/ )
{
return(1);
int FAR PASCAL WEP ( int /*SystemExit*/ )
{
return(1);
}
以上各组成部分参数的含义:Windows.h头文件,它包含有数据类型的定义、API入口
点定义和其它有用的参数信息。PASCAL说明符定义该程序的传递参数和净化堆栈的协定
的具体结构。
1、编写C语言源程序的框架:
C语言源程序(example.C),它包括三种函数:入口函数、输出函数和终止函数。其具体