标准DLL(VC)编写和VB调用
VC编写DLL几种方法的简介+

动态连接库最大的特点就是能节省磁盘空间.当多个进程共享同一个DLL的时候,内存中只有一个DLL的代码.通过映射来使各个进程得以调用.1.用VC建立一个WIN32 DLL我们利用VC编写DLL有几种方法.如果用VC建立一个WIN32 DLL 工程.那这个工程就应该只导出C++的类或全局变量.和全局函数.方法就是在CPP文件中编写你的代码,为每个需要导出的元素进行导出办法是增加如下语句:_declspec(dllexport)你当然可以把它定义成宏例如,如果是一个类STUDENT需要导出, 那么声明时应该是这样写class _declspec{dllexport) student;当然也可以定义时直接导出.我们的客户端,也就是我们调用该函数的客户程序,就需要导入这个类或者函数..填写如下语句:class _declspec(dllimport) student{} // 声明之后就可以利用STUDENT来构造对象,也可以调用它的成员函数..了记住,一定要把工程的连接设置好.要把生成的LIB文件填写好,因为客户程序要想加载DLL,能够准确的调用各个DLL中的函数,都是靠这个LIB文件哪.包括函数的地址等等.当然也可以显示连接利用LOADLIBRARY原型是HMODULE LoadLibrary( LPCTSTR );返回的HMODULE就是一个DLL句柄.所以我们在利用这个句柄来作为参数调用另一个函数GETPROCADDRESSFARPROC GetProcAddress( HMODULE , LPCSTR); //如果利用序号来索引,那么要加上MAKEINTERSOURCE宏返回一个函数指针,利用它来调用函数,LPCSTR是函数名,但你应该利用DUMPBIN来查看一下你导出的函数名,因为C++编译器支持重载,它会以自己的方式重命名.除非你用extern \"C\"用C语言的方式来命名函数.例如一个函数void fun();导出格式应该是extern \"C\" _declspec(dllexport) void fun(); //如果是声明导入函数,直接写原型,如果是声明类,那么一定要是类的头文件声明,包含了成员函数和数据成员的.注意即使是采用了C语言命名方式如果你改变了调用方式_stdcall 那么还是会改变函数命名的,除非你利用DEF文件来导出.EXPORTSfun这样是可以的.2.建立一个MFC扩展DLL扩展DLL是为了更好的支持MFC的类.你建立这个工程后会自动生成一些代码,不要管它先,你把你要动态连接的CPP和相应的.H文件加入到工程,在.CPP文件中需要导出的类上加上AFX_EXT_Class 在.H需要导入的类上加上同样的代码,这样就可以了.例如class AFX_EXT_CLASS CSTUDENT : public CPERSON //.CPP{}class AFX_EXT_CLASS CSTUDENT ; //.H{} //声明3.建立一个常规的DLL如果你要建立扩展的DLL,那么其他的IDE是无法利用的,因为每个编译器的命名方式是不同的.如果你想使其他IDE来调用VC的DLL,那么就建立一个常规的DLL.建立工程以后,编写你要导出的类.例如extern \"C\" _declspec(dllexport) void fun(){AFX_MANAGE_STA TE(AfxGetStaticModuleState( ));}在为每一个需要导出的函数的开头加上这条语句. [Page]在客户端要加上导入语句就可以了.。
(原创)VS2019VB如何生成DLL文件,调用DLL

(原创)VS2019VB如何⽣成DLL⽂件,调⽤DLL ⼀。
⽣成DLL1.打开VS2019,--->"创建新项⽬"------>"类库(NET Framework)---->下⼀步2. 输⼊项⽬名称:bell,3. 输⼊保存位置:D:\4. 点击右下⽅“创建”5.输⼊如下代码:Public Class LearnDLLFunction ABC()ABC = "你好!我学学怎么建⽴DLL⽂件,并怎么调⽤。
"End FunctionEnd Class5.按F5或启动------> "确定"6.这时,在如下⽂件夹中就⽣成了:D:\BELL\bin\Debug\BELL.dll⼆.调⽤dll⽂件1.在vs2019中新建window窗体应⽤程序2. 输⼊项⽬名称:WindowsApp13. 输⼊保存位置:D:\4. 点击右下⽅“创建”5.在窗体Form1中,添加Textbox1控件:6.项⽬----添加引⽤7. 浏览 D:\BELL\bin\Debug\BELL.dll---->添加8.在BELL.DLL前打对号----->确定9.双击Form1窗体,在代码页输⼊⼀下代码:Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadDim Goodmood As New BELL.LearnDLLTextBox1.Text = goodmood.ABCEnd SubEnd Class10,编译运⾏。
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在的可执行程序里重新声明该函数,声明后即可作为自己的函数进行调用。
(完整版)Vb写dll基础

Visual Basic 编写DLL
编写一个简单的DLL
打开VB6.0,新建工程 选择ActiveX DLL
修改工程名,工程名将决定生成的DLL的名称,这里顺便把自动生成的类的名称也修改
在类中添加一个方法(sub,或function )来测试这个DLL
生成一个DLL
调用这个DLL
再新建一个Exe工程
在这个Exe工程里找到并引用刚才生成的DLL
在Exe工程里使用
生成Exe文件,并关闭Exe工程,运行此Exe文件,点击测试DLL
运行效果
关闭Exe,修改DLL工程的属性,并修改DLL的clsTest1.MyMsgbox 方法
重新编译生成新的DLL,并再次运行刚才的Exe文件,点击测试DLL 查看效果:
这说明一点,通过DLL我们不需要重新编写编译Exe文件,只要重新编译DLL文件即可在实际编程中,各个DLL各司其职,组成功能强大,分工明确的软件
比如QQ旋风
DLL公开函数、方法(直接调用,就像调用公共模块中的公共函数一样)
新建一个DLL,命名为test2,并设置自动生成的Class1 的Instancing 属性为
6- GlobalMultiUse(这个类的各种属性和方法可以象简单的全局函数那样被调用。
该类的实例不需要显式创建,因为它会自动创建。
)
我们在这个Class1 中写入一个函数
生成DLL文件
再新建一个Exe工程,并引用这个DLL,然后调用这个DLL的函数进行测试
运行效果:。
在vb中生成dll文件并且调用的方法.

在vb中生成dll文件并且调用的方法.一、DLL制作1.打开新建工程2.选择“Active DLL”,单击“打开”按钮。
3.单击打开按钮后,系统在工程中添加一类模块。
4.为方便对DLL的引用可以改一下名称,如将类模块的名称改为Fraction。
5.在本类模块中添加代码如下。
Option ExplicitPublic NumPublic DenPublic Sub Add(NUm2, Den2)Num = NUm2 + Den2End SubPublic Sub Sbt(NUm2, Den2)Num = NUm2 - Den2End SubPublic Sub Mul(NUm2, Den2)Num = NUm2 * Den2End SubPublic Sub Div(NUm2, Den2)Num = NUm2 / Den2End Sub6.为与其他工程相区别,可将本工程命名为“Math”。
7.生成DLL文件。
二、DLL引用1.建立一个普通窗体。
2.添加引用。
3.在程序中添加以下代码。
Option ExplicitPublic Frac As New Fraction Private Sub Command1_Click() Frac.Add Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command2_Click() Frac.Sbt Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command3_Click() Frac.Mul Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command4_Click() Frac.Div Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command5_Click()Text1 = ""Text2 = ""Text3 = ""End Sub 4.运行程序。
用VB调用VC编写的DLL

这些函数名要用做 VB 中声明时的别名。
如果声明时不带别名会出现“Dll 调用约定错误”。
VB 中编写如下代码运行即可:
Option Explicit
Private
Declare
Function
FuncInDll
Lib
"E:\Computer
Science\dll\liudll\dll_withLibAndH.dll" Alias "_FuncInDll@12" (ByVal a As Long,
如何用 VB 调用 VC 编写的 DLL
——DLL 内函数调用采用别名 首先用 C++编写: dll_withlibAndH.h 如下: extern "C" __declspec(dllexport) int __stdcall FuncInDll (int a);
dll_withlibAndH.cpp 如下: #include <objbase.h> #include <iostream.h> #include "dll_withLibAndH.h"//看到没有,这就是我们增加的头文件
创建一个.bat 文件并输入:
Cl/c dll_withLibAndH.cpp
Link/dll dll_withLibAndH.obj 之后运行此批处理文件即生成 dll_withLibAndபைடு நூலகம்.dll 文件。用 Dll 函数查看器(Viewdll
程序)查看此 dll 文件内的函数,此处为_FuncInDll@12(12 为此函数的参数字节数),
ByVal b As Long, ByVal c As Long) As Long
MarlabSimulink(2014a)生成C++代码,并用VC2010生成dll供VBA或VB调用使用说明

MarlabSimulink(2014a)生成C++代码,并用VC2010生成dll供VBA或VB调用使用说明一、过程概述1、使用VC2010生成.dll文件,测试VC程序是否正常2、使用VBA调用VC2010生成的.dll文件,测试.dll文件调用的VBA代码是否正常,这里使用Excel VBA主要是为了以后输入输出数据更方便。
3、使用MatlabSimulink模型编译成c++文件。
4、VC2010集成MatlabSimulink生成的c++代码,验证在VC2010环境下能正常运行。
5、VC2010将生成的程序编译成.dll文件,以便于VB调用6、使用步骤1,2验证MatlabSimulink生成的代码二、具体实施过程描述1、使用VC2010生成.dll文件1.1工程建立首先打开VS 2010--> 新建工程 --> Win32 --> Win32项目 --> 输入工程名称(MakeDll),选择好保存工程的路径-->确定。
在弹出的“应用程序设置”--> "应用成程序型" --> 选择 "DLL(D)" --> 附加选项-> 选择"空项目(E)" ---->点击"完成"进入项目工作窗口1.2开始创建DLL第一步:在头"解决方案资源管理器" --> 头文件 --> 右键 -->添加新建项---→选择"头文件(.h)" -->输入文件名称(max) --> 点击“添加(A)”,完成max.h文件的添加。
max.h头文件中的代码为:1. #ifndef _MAX_H2. #define _MAX_H_3. __declspec(dllexport) int __stdcall fmax(int a,int b);4. #endif代码说明:__declspec(dllexport) 的作用是指定导出该函数为DLL函数;__stdcall是函数调用约定,表示该DLL函数被C/C++以外的语言调用;备注:使用时需要根据实际定义的主函数返回值类型和函数名称修改低3行红色而自体标记部分内容。
vb和vc混合编程实例(ocx和dll)

vb和vc混合编程实例(ocx和dll)(转载)前⾔:由于以前⽤vb和vc++封装过dll和ocx⽂件. 或者在⽹上下的类;若重新编写和封装会很费时和费⼒. 如vb简单易⽤,对数据库操作通⽤类进⾏封装.现在vc中可以引⽤之。
另外由于vc执⾏效率⾼,某些较复杂算法或低层处理可在vc中进⾏封装. 这样经常要求混⽤.下⾯是实际中个例⼦记,分vb6.0,vc++各⾃创建和调⽤四个部分1: vb能封装ocx和active dll⽂件. 注意 active dll是⼀种动态,在被调⽤环境中不仅引⽤这个dll,⽽且还要引⽤这个dll所引⽤的其它⽂件,如 DBCommom.dll 是个数据库操作类封装,它引⽤了Ado 接⼝).其创建略,具体引⽤见后.2.vc中做dll时注意要提供接⼝,供其它程式调⽤.a>创建 win32 Dynamic-Link Library 如项⽬CMyTestDllb>加⼊成员function(在 .h中申明 .cpp中实现)//取电脑名称int CMyTestDll::GetComputerNameE(LPTSTR computer_name){DWORD buf=255;LPTSTR strname=new char[buf];if(GetComputerName(strname,&buf)!=0){strcpy(computer_name,strname);return 1;}return 0;}//计算两个值之和int CMyTestDll::Sum(int a, int b){return(a+b);}c.>⼀定要加上CMyTestDll.def ⽂件,并在在其中定义导出各个function及参数,否则不能被调⽤EXPORTSGetComputerNameE @1;Sum @2; @3;d.>编译成dll便可以.最好每个function定义int为返回值.3.vb引⽤vc中dll 和普通API函数⼀样.(vb的long对应 vc的int)'引⽤Private Declare Function GetComputerNameE Lib "⽬录\MyTestDll.dll" (ByVal strName As String) As LongPrivate Declare Function Sum Lib "⽬录\\MyTestDll.dll" (ByVal g As Long, ByVal b As Long) As Long'调⽤Dim str As String * 20 ' 注意对于传址,⼀定要定义其空间⼤⼩(数组可以不指定)dim a As Long, b As Longa=25 b=78result = GetComputerNameE(str)result=Sum(a, b)4.vc引⽤vb中ocx和dll如 C:\TestVb\DBCommon.dll 是个vb做的数据库通⽤类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC6.043;+源文件,用于添加DLL程序代码
VC6.0编写DLL 新建C++头文件,用于声明函数
C++头文件程序代码 C++源头文件, DLL程序代码
VC6.0编写DLL
声明DLL函数出口: 新建一记事本文件,在其中加入如下代码,然后把扩展名改为 “.def”,并添加到C++工程源程序文件中,如下:
VC6.0编写DLL
右键
VC6.0编写DLL
VB通用声明调用外部函数/过程:
VB6.0调用DLL
注意数据类型和函数/过程一定要与DLL文件里的一一对应,Byval为数值传递,缺省为地址传递, 函数声明用function且返回值有数据类型要求,过程用sub无数据类型且调用时要用call()语句。
VB调用外部函数/过程: