当前位置:文档之家› MATLAB2014aC++代码生成,并用VC2010生成dll供VBA或VB调用使用说明

MATLAB2014aC++代码生成,并用VC2010生成dll供VBA或VB调用使用说明

MATLAB2014aC++代码生成,并用VC2010生成dll供VBA或VB调用使用说明
MATLAB2014aC++代码生成,并用VC2010生成dll供VBA或VB调用使用说明

MATLAB2014a生成C++代码,并用VC2010生成dll 供VBA或VB调用使用说明

一、过程概述

1、使用VC2010生成.dll文件,测试VC程序是否正常

2、使用VBA调用VC2010生成的.dll文件,测试.dll文件调用的VBA代码是否

正常,这里使用Excel VBA主要是为了以后输入输出数据更方便。

3、使用MATLAB编写脚本程序文件,使用MATLAB CODER功能编译成c++文件。

4、VC2010集成MATLAB生成的c++代码,并编译成.dll文件

5、使用步骤1,2验证MATLAB生成的代码

二、具体实施过程描述

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_H

2. #define _MAX_H_

3. __declspec(dllexport) int __stdcall fmax(int a,int b);

4. #endif

代码说明:

__declspec(dllexport) 的作用是指定导出该函数为DLL函数;

__stdcall是函数调用约定,表示该DLL函数被C/C++以外的语言调用;

备注:使用时需要根据实际定义的主函数返回值类型和函数名称修改低3行红色而自体标记部分内容。这里需要修改的是int数据类型,fmax(int a,int b)的函数名称和变量名称和变量的类型,或者直接从第二步的主程序中复制过来。

第二步:

在头"解决方案资源管理器" --> 源文件 --> 右键 -->添加新建项

-->选择"C++文件(.cpp)" -->输入文件名称(max) --> 添加(A)

max.c源文件中的代码为:

1. #include"max.h"

2. int __stdcall fmax(int a,int b)

3. {

4. return a>b?a:b;

5. }

主函数中定义了比较两数大小的函数fmax(),依然在此函数前声明该函数的调用为__stdcall类型(被C语言以外的语言调用);

备注:第2行中除了 __stdcall不能修改之外,其他的数据类型,变量名称,函数名称均可以根据实际需要进行修改。例如如下所示的示例。

主程序修改示例

int __stdcall fmax(int a,int b)

{

int c;

c=a+b;

return c; // 返回运算结果

}

第三步:

在头"解决方案资源管理器" --> 源文件 --> 右键 -->添加新建项

-->选择"模块定义文件(.def)" -->输入文件名称(max) --> 添加(A)

max.def的作用是用于导出一个DLL的函数;

max.def模块文件中的代码为:

1. LIBRARY MakeDll

2. EXPORTS

3. fmax @1

第一行:“LIBRARY”的作用是告诉链接器(linker)如何命名你的DLL,但它只是影响lib连接dll的名称的,而不是影响生成dll的名称;

第二行:EXPORTS 语句的作用是引入导出的函数或数据组成的节;

第三行:fmax @1指定按序号导;

所有程序文件添加完成后如下图所示。

第四步:

按 F5启动调试或直接菜单栏 --> 生成 -->生成 MakeDll(U),这如果提示生成成功那么在你保存工程的的路径下的"Debug"文件夹下即可找到生成成功的MakeDll.dll动态链接库文件

在VC2010界面的下方,编译器信息中也会有生成的.DLL文件所在的路径信息,这条信息在VBA中引用.dll时可以直接复制过去。

2 用VB或者VBA调用

2.1新建VBA用户窗体或者VB工程选择"标准EXE"

在对象窗口设计好如下界面,一些标签,三个文本框和一个按钮,如图:

输入以下代码

1.Private Declare Function fmax Lib _

2."D:\ProgramFile\Vc.dllToVba_ZuiDaZhi\MakeDll\Debug\MakeDll.dll" _

2.1.(ByVal inta As Integer, ByVal intb As Integer) As Integer

3.Private Sub CommandButton1_Click()

4. Dim a As Integer, b As Integer

5. a = TextBox1.Text

6. b = TextBox2.Text

7. TextBox3.Text = fmax(a, b) '调用MakeDll.dll

8.End Sub

第1行,申明函数,'声明DLL过程

第2行,申明.dll所在的文件路径,可根据实际情况更改存放地点

第2.1行,申明变量,使用ByVal传值方式将变量传送到.dll中

第3—8行完成.dll内的fmax函数调用和结果显示。

运行VB或VBA程序,输入a,b的数值(因为.dll中定义的白能量为int整数型,因此程序在这里使用整数型运算,输入数据的小数点会被自动取整)

3、建立MATLAB脚本并编译成c++程序

3.1新建脚本程序

在增加MATLAB算法程序之前,先完成以上部分的内容,这样为后续增加代码提供良好的基础保障。

1、新建脚本文件,输入如下程序代码

function c=foo(a,b)%#codegen

%程序算法部分,求和

c=a*b^3;

end

将脚本并保存为foo,这个名称和函数名称要一致

这里的“%#codegen”的作用是提示MATLAB这是要生成程序的代码,可以避免一些错误路提示

“%程序算法部分,求和”使用%开头,时程序注释部分,这部分生成代码时不会编译,因此可以在这里详细地描述程序的功能,输入输出变量等,代码生成后在foo.cpp中也可以看到这些注释的内容。

3.2新建一个程序生成的工程

3.2.1如下图所示,新建代码生成工程,输入工程名称foo

3.2.2代码生成的文件输入和变量的格式选择

点击右下角的“添加文件”→选择foo.m文件,设置变量a,b的格式,这里a,b都是单个的变量,因此选择为double型,格式1x1矩阵--只有一个元素的矩阵。

3.2.3代码生成方式设置

输入生成的程序名称,程序类型,还要在设置界面设定语言为c++,

然后点击“编译”按钮即可完成程序代码的生成。

完成后可以直接查看报告,算法的核心部分位于foo.cpp文件下。

代码生成报告内容

如果提示找不到编译器,在命令窗口输入mex –setup选择已经安装的编译器后重新编译即可。

4、VC2010集成MATLAB生成的代码

4.1添加生成代码的头文件和源文件

在这里和上文不一样的地方是,上文中max.cpp,max.def,max.h在这

里前部改成了VcFunction.cpp, VcFunction.def,

VcFunction.h,而上文的函数名称fmax改成了foo。

首先在头文件和源文件文件夹下添加代码生成报告中的所有的头文件和源文件,这些文件在代码生成文件夹下面

添加代码生成所在文件夹的路径,项目标题上右键→属性

在包含目录栏中更改为代码生成的目录下的文件夹

生成的代码在foo文件夹下,那么路径就制定到foo文件夹的位置。

4.2VC2010中调用MATLAB功能函数

(红色部分,直接调用即可VcFunction.cpp)

//主程序部分

//申明程序是由C语言以外的的程序调用

#include"foo.h"

#include"VcFuntion.h"

double __stdcall VcFuntion(double a,double b)

{

double c;

c=foo(a,b); //这里foo是MATLAB程序中定义的函数名称,不要和VC中的名称混淆

return c; //返回运算结果

}

在foo.cpp程序中找到主程序,找到出现MATLAB脚本程序中的注释的位置即可,如下所示

// 求和---------------------------------MATLAB中的注释部分内容

// Arguments : double a

// double b

// Return Type : double

//

double foo(double a, double b)

{

这里可以看到,VC中的主程序VcFunction.cpp的写法和foo.cpp中主程序的写

法十分类似,结构一样。

double __stdcall VcFuntion(double a,double b)

只是中间增加了__stdcall,函数名称改为VC中的名称VcFuntion VcFunction.h程序部分的写法和上文说的一样,根据这里的主函数内容更改

了数据类型和函数名称而已。

__declspec(dllexport) double__stdcall VcFuntion(double a,double b);

5、同步更新的使用

生成dll文件并按上面的方式在VBA中调用,同时打开MATLAB,VC2010的时候,更改MATLAB脚本文件的内容,编译后,VC2010会提示是否更新程序,选择更新程序即可实现程序的同步更改。编译后.dll文件也更新了。但是不能在VB或VBA正在调用.dll时进行以上操作,因为此时VB或VBA程序正在运行,dll 正在被使用,不能打断程序运行。

6、固定长度数组变量输入的程序

如果输入的变量为数据和矩阵,并且变量的长度和矩阵的大小固定不变,可以使用这种方式生成代码。

例如:

function Zi=foo(X,Y,Z,Xi,Yi)%#codegen

%计算算法

Zi=interp2(X,Y,Z,Xi,Yi);

End

这个程序的功能是,输入已知的X(1×4),Y(1×4)向量和Z(4×4)矩阵,使用三元两点法实现插值计算的到Xi,Yi对应的点Zi

6.1 MATLAB代码生成设置

只需要更改变量维数部分的定义,入下图所示

6.2 VC集成MATLAB生成的代码

首先找到foo.cpp程序中由MATLAB脚本程序生成的代码部分的内容。

// 计算算法----------脚本的注释内容,找到这里就是脚本生成的代码部分了// Arguments : const double X[4]

// const double Y[4]

// const double Z[16]

// double Xi

// double Yi

// Return Type : double

//

double foo(const double X[4], const double Y[4], const double Z[16], double Xi,double Yi)

{

根据foo.cpp程序中foo函数的程序结构确定VC中VcFuntion.cpp的结构如下double __stdcall VcFuntion(double *X,double *Y,double *Z,double

Xi,double Yi)

只有红色表几部分不一样,这里使用*X的方式,输入的X是一个有4个元素的

数组,使用指针指向数组的首地址,对应VB中的定义就是指向数组的首个元素。6.3 VB代码的修改

1、程序申明

VB代码的申明部分,主要是传值程序部分增加了变量定义的内容,下面程序红

色标记的部分。

'声明DLL过程

'第一行,申明函数

'第二行,申明.dll所在的文件路径,可根据实际情况更改存放地点

'第三行,申明变量

Private Declare Function VcFuntion Lib _

"D:\XUXINGREN\MatlabFile\MatlabAndVcMakeDllForVba_ShuZu\MakeDll\Debug \MakeDll.dll" _

(ByRef X As Double, ByRef Y As Double, ByRef Z As Double, ByVal Xi As Double, ByVal Yi As Double) As Double

2、变量定义

'这个地方定义三个数组,一定要分开书写,不能在一行里面定义三个数组。

'这里定义的数组长度与MATLAB中定义的数据长度一致

'这里只需要考虑一维数组即可,在dll中会完成一维数组---矩阵的转换。 'Z数组为一个矩阵,一维数组中数据的排列和矩阵的对应位置如下表所示,使用时注意顺序。

'或者把Z的数据放到同一列中,矩阵Z的坐标对应顺序。

'20,21,22,23,24,25,26,27,...

' 1 2 3 4

'1 20 24

'2 21 25

'3 22 26

'4 23 27

'

Dim X(0 To 3) As Double

Dim Y(0 To 3) As Double

Dim Z(0 To 15) As Double

For i = 0 To 3 '输X,Y入数组元素

X(i) = i + 1

Y(i) = i + 1

Next i

For i = 0 To 15 '输入Z数组元素

Z(i) = i + 20

Next i

3、VB变量输出到VC的方式

'这里VB数组的第一个元素和首地址重合,因此实际传递了数组的首地址给.dll Result = VcFuntion(X(0), Y(0), Z(0), Xi, Yi)

7、可变长度数组变量输入的程序

如果输入的变量为数据和矩阵,并且变量的长度和矩阵的大小需要变化,可以使用这种方式生成代码。MATLAB coder提供了一种只限制变量常德和矩阵大小上限的定义方式,比如定义长度上限为10,那么长度在10以内的变量长度都是可以处理的,这样就更加灵活一些了。

例如:

function Zi=foo(X,Y,Z,Xi,Yi)%#codegen

%计算算法

Zi=interp2(X,Y,Z,Xi,Yi);

End

这个程序的功能是,输入已知的X(1×n),Y(1×n)向量和Z(n×n)矩阵,使用三元两点法实现插值计算的到Xi,Yi对应的点Zi,程序功能与第6部分的程序内容一样。

7.1 MATLAB代码生成设置

只需要更改变量维数部分的定义,入下图所示

这里选择“:10”表示“up to 10“—上限设置为10

6.2 VC集成MATLAB生成的代码

首先找到foo.cpp程序中由MATLAB脚本程序生成的代码部分的内容。

// 计算算法

// Arguments : const double X_data[]

// const int X_size[2]

// const double Y_data[]

// const int Y_size[2]

// const double Z_data[]

// const int Z_size[2]

// double Xi

// double Yi

// Return Type : double

//

double foo(const double X_data[], const int X_size[2], const double Y_data[], const int Y_size[2], const double Z_data[], const int Z_size[2],

double Xi, double Yi)

这里const double X_data[]表示输入的是数组变量,但是[]为空,这点和固定长度数组输入时是不同的,数组的长度由const int X_size[2]决定,因为1×n是两个变量决定了矩阵的大小,因此const int X_size[2]的[]内是2

根据foo.cpp程序中foo函数的程序结构确定VC中VcFuntion.cpp的结构如下

double__stdcall VcFuntion(double*X,int*X_size, double*Y,int*Y_size,double

*Z,int*Z_size,double Xi,double Yi)

{

只有红色表几部分不一样,输入的是数组,这里使用*X的方式,使用指针指向数组的首地址,对应VB中的定义就是指向数组的首个元素。

6.3 VB代码的修改

1、程序申明

VB代码的申明部分内容同上文,主要是传值程序部分增加了变量定义的内容。(ByRef X As Double, ByRef X_size As Long, _

ByRef Y As Double, ByRef Y_size As Long, _

ByRef Z As Double, ByRef Z_size As Long, _

ByVal Xi As Double, ByVal Yi As Double) As Double

注意:使用传值函数,注意VB变量类型和VC变量类型的对应,VC中的int类型与VB中的long类型对应。其他类型对应关系见附录1的对应关系表。

2、变量定义

'这个地方定义三个数组,一定要分开书写,不能在一行里面定义三个数组。

'这里定义的数组长度要在MATLAB中定义的数据长度上限以内即可,当然X,Y,Z的长度还要满足MATLAB中interp2函数的要求:X(1×n),Y(1×n),Z(n×n)

'这里只需要考虑一维数组即可,在dll中会完成一维数组---矩阵的转换。 'Z数组为一个矩阵,一维数组中数据的排列和矩阵的对应位置如下表所示,使用时注意顺序。

'或者把Z的数据放到同一列中,矩阵Z的坐标对应顺序。

'20,21,22,23,24,25,26,27,...

' 1 2 3 4

'1 20 24

'2 21 25

'3 22 26

'4 23 27

'

Dim X(0 To 3) As Double

Dim Y(0 To 3) As Double

Dim Z(0 To 15) As Double

For i = 0 To 3 '输X,Y入数组元素

X(i) = i + 1

Y(i) = i + 1

Next i

For i = 0 To 15 '输入Z数组元素

Z(i) = i + 20

Next i

3、VB变量输出到VC的方式

'这里VB数组的第一个元素和首地址重合,因此实际传递了数组的首地址给.dll Result = VcFuntion(X(0), X_size(0), Y(0), Y_size(0), Z(0), Z_size(0), Xi, Yi)

附录1:VC与VB的数据类型对应关系

vb调用vc 的DLL

4.1 新建工程 打开在VC++6.0,new一个Win32-Dynamic-Link Library工程dlltest。 4.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 对函数名 最终生成符号的方式不同 */ #endif 4.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 FILE目录,添加一个文本文件(不能是word文档,一般是txt 格式的),将文档重命名为lib.def,点击打开该文档。 在文档中输入代码: LILBRARY dlltest EXPORTS add @ 1 sub @ 2 说明:DLL函数的导出有两种方式。

一种是显式导出:在.h文件中在函数声明前加入如下语句: __declspec(dllexport)。使用该方法是不用添加.def文档的。该方法导出的函数,只能被C或C++调用,不能被其他语言调用。 一种是隐式导出:就是在SOURCE FILE目录中添加一个.def文档,在该文档中写入要导出函数的代码。 .def语法规定注释用分号(;),且注释不能与代码共享一行,代码说明如下:LIBRARY dlltest ;该语句说明了相应的DLL工程。 EXPORTS add @ 1 sub @ 2 ;该语句声明了将DLL工程中导出的函数,只要写入 ;函数名称即可,不用说明返回值以及函数参数。其实@ 1 ;和@ 2是为函数编号所使用的 在添加所有的工程文件后,编译生成dll文件后 4.3 用vc调用DLL 在vc中new一个Win32 Console Application 工程test 代码如下: #include #include typedef int (__stdcall *padd)(int,int) ; typedef int (__stdcall *psub)(int,int) ; int main() { HINSTANCE hd ; hd = LoadLibrary(“填入要调用DLL的路径”) ; if(!hd) { printf(“Load DLL err\n”) ; return 0 ; } padd add = (padd)GetProcAddress(hd,“add”) ; if(!add) { printf(“Get add err\n”) ; FreeLibrary(hd) ; return 0 ; }

VB调用动态链接库(DLL)

VB调用动态链接库(DLL) 作为一种简单易用的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等,具体方法可以参见相关文档。下面只以Visual C++5.0为例,介绍一下开发应用于VisualBasic5.0的动态连接库时应注意的问题(本文中所有涉及C/C++语言或编译环境的地方,都以VC5为例;所有涉及VisualBasic的地方都以VB5 为例)。 作为一种32位Windows应用程序的开发工具,VB5生成的exe文件自然也都是32位的,通常情况下也只能调用32位的动态连接库。但是,并不是所有的32位动态库都能被VB生成的exe 文件正确地识别。一般来说,自己编写用于VB应用程序调用的动态连接库时,应注意以下几个方面的问题: 1、生成动态库时要使用__stdcall调用约定,而不能使用缺省的__cdecl调用约定;__stdcall 约定通常用于32位API

VB如何调用dll函数

VB如何调用dll函数 2008-01-10 17:17 開始習慣孤單 | 分类:VB| 浏览13089次 假如我有个DLL,名为 asdfg.dll 它里面有一个函数 zxc(参数1,参数2) 我要用这个函数,该怎么写? 请高手帮我写出脚本,有时间的话请再加上注释 谢谢!! 2008-01-10 19:50 提问者采纳 1.在工程-引用中将asdfg.dll引用过来 2.dim AAA as asdfg 'asdfg是类模块的名称 Private Sub Form_Load() dim x Set AAA = New asdfg x = AAA.zxc(参数1,参数2)'参数1,2自己写 End Sub 建议你了解一下下面dll的制作方法,理解就更透彻了。下面内容来自百度。 1.新建一个ActiveX Dll,工程名字为vbmytestdll,类模块

名字为mytestdll 2.类模块内容只有一个函数,主要返回DLL的HELLO WORLD Public Function dlltest1() As String dlltest1 = "HELLO WORLD" End Function 3.保存,生成DLL,名字为 vbmytestdll.dll 4.新建一个EXE工程,在菜单: 工程---引用---浏览里找到vbmytestdll.dll,把它引用进来 5.EXE工程代码如下: Option Explicit Dim testdll As mytestdll'类模块名字 Private Sub Form_Load() Set testdll = New mytestdll 'DLL的一个新实例 Me.Caption = testdll.dlltest1 '我的标题=返回DLL的HELLO WORLD

一步一步教用VC和VB调用C++ DLL

一步一步教你用VC和VB调用C++ DLL 从VC++应用程序调用C++ DLL的函数 Visual Studio 6 使创建包含函数或类的动态连接库(DLL) 变得非常容易.第一步 打开Visual Studio 然后选择File | New菜单项: 选择Win32 Dynamic Link Library, 输入工程名, 敲OK.

选择A DLL that exports some symbols 并单击Finish.在File View里你会看到如下的工程文件: 第二步 在Test.cpp里,你将看到如下代码: // Test.cpp : Defines the entry point for the DLL application.//#include "stdafx.h"#include "Test.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_ call, LPVOID lpReserved)

{ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } // This is an example of an exported variable TEST_API int nTest=0; // This is an example of an exported function. TEST_API int fnTest(void) { return 42; } // This is the constructor of a class that has been exported.// see Test.h for the class definition CTest::CTest() { return; } Test.cpp 包含了fnTest 和 CTest::CTest.如果你现在编译Test.dll, 你将会得到一个可以被其他VC++应用程序直接调用的DLL. 允许其他VC++程序调用的关键机制?( key mechanism)就包含在Test.h中: // The following ifdef block is the standard way of creating macros// which make exporting from a DLL simpler. All files within this DLL// are compiled with the TEST_EXPORTS symbol defined on the command line.// This symbol should not be defined on any project that uses this DLL.// This way any other project whose source files include this file see // TEST_API

vb编写DLL学习

怎样用VB编写DLL文件??? 你先打开VB,然后先中“ActiveX Dll”工程,然后开始编辑。编完后,保存一般是以“.cls”和“.vbw”保存。这时你选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正在生成.dll文件”。生成以后是一个有好象齿轮状的图标。 如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。 在vb6里建新工程时选用建立dll 做好后用vb的引用就可以了 VB中创建的DLL只是COM组件,无法作为输出函数的DLL,其实这只是个错误的说法。其实MS 非常狡猾,如果你是个VB疯狂发烧友的话,应该早就狂试出这种可以创建输出函数的DLL的方法。 VB编译文件实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接。如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VB的工程选项中将这些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过Link来创建我们需要的DLL了。不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句: Sub Main If MsgBox("哈哈", vbOKCancel) = vbOK Then Shell "link2.exe " & Command$ End If End Sub 然后编译为LinkTemp.EXE,接下来将LINK.EXE改名为Link2.exe,将LinkTemp.EXE改名为Link.EXE。这样在VB调用Link.EXE时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷贝出来了。然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Module并创建一个Public函数mathadd: Public Function mathadd(ByVal a As Long, ByVal b As Long) As Long mathadd = a + b End Function 编译这个工程,在Link的时候就会中断。然后把创建的Class1.obj、Module1.obj、Project1.obj备份出来。然后就可以调用Link2.exe连接OBJ到DLL了,我的连接代码是: Link2.exe "e:\vbdll\Class1.obj" "e:\vbdll\Module1.obj" "e:\vbdll\Project1.obj" "E:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /EXPORT:mathadd /OUT:"e:\vbdll\ProjectOK.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERS 注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要: Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long

在VB中调用DLL的方法

1制作好DLL之后,就可以用VB调用它,实现VB调用C程序。VB程序要使用DLL中的函数,首先必须要有特殊的声明,用Declare声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。 语句格式为:Declare Sub过程名Lib[Alias"别名]([ByVal参数AS类型]),或为Declare Function函数名Lib[Alias"别名]([ByVal参数AS类型])AS类型在声明中首先用Declare 关键字表示声明DLL中的函数。在C语言中有的函数类型为VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。有的函数具有返回值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。 例如上面的ADD.DLL在VB中就可以声明为: Declare Function ADD Lib“c:\ADD.dll”(ByVal X AS Integer,ByVal Y AS Integer,ByVal filein asstring)AS Integer 通过此声明语句将函数ADD声明到VB中,便可直接调用。 2、dll文件中的函数好像是C语言写的, //函数名:int__stdcall GetMacNo(int*MacNo) //功能:获取卡机的卡机号(单机时) //参数:MacNo[0]-被读出的卡机号 //返回值:0-成功, //2-PC接收超时, //3-应答错误 dll的文件名是COMM232.dll 函数的形参int*MacNo是指针吗? 在VB中应该怎么声明和调用该函数? VB里也可以定义指针吗? 问题补充:vb调用dll文件中的函数我是会的,但这儿的形参有一个星号才不知是怎么一回事, 我是这样声明的对吗? Public Declare Function GetMacNo Lib"COMM232.dll"(ByVal MacNo As Integer)As Integer 又应该怎么调用呢?要先定义一个指针的变量再传给*MacNo还是要怎么做? 都说了MacNo是被读出的卡机号,那么就是传址的了。 dim l as integer dim m as integer l=GetMacNo(m) if l=0then label1.caption="卡机号:"&m elseif l=2then msgbox"PC接收超时" elseif l=3then msgbox"应答错误" end if

VB封装DLL实例讲解(三)

4 1 2点选DLL 3点打开按钮

5 2 3点选DLL 4点打开按钮

我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。但如果我们有多个DLL需要批量注册时,可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BA T文件,让打包发布时将该BA T文件一并打包发布,安装时运行该BA T文件,来完成N个DLL的批量注册,在些就不多着笔墨,大家可以参看实例包中的BA T文件实例。 (二)DLL自动引用方法 2.1 通过References对象的AddFromFile方法实现自动引用 Dim ref As Reference '申明引用类对象 On Error Resume Next '避免因重复引用造成的错误提示 '实例化引用对象,完成DLL的引用 Set ref = References.AddFromFile(CurrentProject.Path & "\ClsFindString.dll") 为了避免因重复引用出现的错误,我们可以如上代码中加入Error语句,我们还可以在应用程序退出时,通过对References对象的Remove方法释放DLL或反引用。 Dim ref As Reference '申明引用类对象 '实例化反引用对象 Set ref = References("ClsFindString") '移除引用指定类库 References.Remove ref 说明:根据本人实践,我个人倾向于使用Error语句,因为如果应用程序非正常退出,引用对象没有反引用成功,启动时就难免出现重复引用的错误问题。 2.2 通过DLL唯一标识号实现自动引用 Dim ref As Reference'申明引用类对象 On Error Resume Next '避免因重复引用造成的错误提示 '唯一标识号完成注册,需要DLL标识号,主版本号,次版本 Set ref = References.AddFromGuid("{C5E340E2-C557-4852-AE83-5A0578B6863B}", 1, 0) DLL的标识号是编译生成时就确定了的,这个标识号就是DLL的终生制身份证号,我们可以通过这个唯一标识号来完成DLL自动引用。但此种方法必须具备两个条件,一是DLL已经成功注册,二是我们知道了该DLL的标识号、主版本号、次版本号。 2.2.1获取DLL标识号、主版本号、次版本号方法 Dim ref As Reference '申明引用类对象 '实例化引用类库对象 Set ref = References.AddFromFile(CurrentProject.Path & "\ClsFindString.dll") Debug.Print ref.GUID '获得DLL唯一标识号 Debug.Print ref.Major '获得主版本号 Debug.Print ref.Minor '获得次版本号

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文件中加上如下的几行: 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目

(完整版)vc6.0编写DLL文件及vb调用示例

利用vc6.0编写DLL文件,为了方便其他函数调用,可以采取以下方式 方法过程 一采用Win32 Dynamic-Link Library建立。 过程:本次采用建立一个计算整数的平方和立方的plf.dll文件。 1文件—新建—工程—Win32 Dynamic-Link Library,工程名称为plf,点击确定,后选择一个空白文档。 2,点击做下角FileView。显示如图1所示 2.左上角文件—新建—文件—C++ Source File,输入名称为plf.,建立空白文档plf.cpp 在其内输入代码如图2所示: 3左上角文件—新建—文件—C++ Header File,输入名称为plf.,建立空白文档plf.h 在其内输入代码如图3所示: 4在plf文件夹中新件文本文档,里面输入如图4所示代码

保存,改后缀名为def.名称为plf.def。 5 右击Source Files,选中添加文件到目录,对话框选中plf.def文件。6点击组建(plf.dll)或者直接键盘F7。 7打开DEBUG文件夹中有两个文件为plf.dll和plf.lib文件,保留。三验证 1 使用vc验证 建立vc源程序,输入代码为 2 采用vb验证

其中关键是语句 Public Class Form1 Private Declare Function sq Lib"D:\vcb\plf\plf.dll" (ByVal i As Integer) As Integer Private Declare Function cub Lib"D:\vcb\plf\plf.dll" (ByVal j As Integer) As Integer

VB调用Matlab生成的dll完全攻略(混合编程必备)

用VB调用Matlab生成的dll MATLAB 具有强大的运算功能,VB 具有开发界面友好的特点,可以将二者结合,可以开发出脱离MATLAB 环境的VB程序,即利用VB调用Matlab生成的dll。 工具/原料 Microsft Visual Basic 6 Matlab 7.0 步骤/方法 在MA TLAB 系统中的命令输入comtool命令或点击左下角“Start- > MATLAB - > MA TLAB COMBuilder - > MATLAB COM Builder”,启动MATLAB COM Builder。 建立工程,选择菜单“File - > New Project”,设置工程参数。设置的工程名为COM 组件编译后的文件名称,也可以输入新类,点击“Add”建立新类。

点击菜单“Project - > Add File. . . ”,向工程中加入M或MEX文件。 点击菜单“Build - >COM Object. . . ”,状态窗口出现“Standalone DLL build complete.”说明生成dll成功。

注册生成的myfunc_1_0.dll,在VB中引用MWComUtil.dll和myfunc_1_0.dll,就可以像调用里边的函数了!

插入完成后,Visual Basic中的具体调用方法和命令 此时Matlab中定义的函数: function daoju_gonge(z,x,m,ha,c,b) (函数名daoju_gonge) VB调用 1.先对所有的参数进行定义(关键) Private z As Double Private x As Double Private m As Double Private ha As Double Private c As Double Private b As Double Private theDaoju As myDaoju.Daoju (theDaoju 是自己设定的一个VB中的变量,myDaoju 则是由.m文件编译而成的.dll文件文件名,同时也是其中定义的组件名Component name,daoju则是其类名Class name) 2.调用命令 Call theDaoju.Daoju_gonge(z, x, m, ha, c, b) 3.对VB进行初始化 Private Sub Form_Load() Set theDaoju = New myDaoju.Daoju End Sub 注意事项以及相应问题解决 1.在编译dll时,需要机器安装有C或C++编译器,比如安装VC++6.0 2.Matlab启动Comtool工具之前,还需要利用mbuild –setup 命令对compiler(转换器) 设 置,将转换器设置成C++/C语言对应的compiler,而不是Matlab自带的compiler。 Ps:前两条如果没有做到的话,在comtool生成界面往往出错,无法生成dll等相应的文件。 3.如果出现有其他一些小问题,尝试重启Visual Basic或Matlab,再或者重启电脑。 疑难点: 如果对文件进行处理,使其能够在其他电脑上同样实现设定的功能。 可选方案一:文件打包。 Visual Basic打包程序或是Matlab打包程序。

在vb中调用dll的方法

1 制作好DLL之后,就可以用VB调用它,实现VB调用C程序。VB程序要使用DLL中的函数,首先必须要有特殊的声明,用Declare声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。 语句格式为:Declare Sub 过程名Lib [ Alias " 别名]([ByVal 参数AS类型]),或为Declare Function函数名Lib [Alias " 别名]([ByVal 参数AS类型])AS类型在声明中首先用Declare 关键字表示声明DLL中的函数。在C语言中有的函数类型为VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。有的函数具有返回值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。 例如上面的ADD.DLL在VB中就可以声明为: Decl are Function ADD Lib “c:\ADD.dll” (ByVal X AS Integer, ByVal Y AS Integer ,ByVal filein asstring)AS Integer 通过此声明语句将函数ADD声明到VB中,便可直接调用。 2、dll文件中的函数好像是C语言写的, // 函数名:int __stdcall GetMacNo(int *MacNo) // 功能:获取卡机的卡机号(单机时) // 参数: MacNo[0]-被读出的卡机号 // 返回值:0-成功, // 2-PC接收超时, // 3-应答错误 dll的文件名是COMM232.dll 函数的形参int *MacNo是指针吗? 在VB中应该怎么声明和调用该函数? VB里也可以定义指针吗? 问题补充:vb调用dll文件中的函数我是会的,但这儿的形参有一个星号才不知是怎么一回事, 我是这样声明的对吗? Public Declare Function GetMacNo Lib "COMM232.dll" (ByVal MacNo As Integer) As Integer 又应该怎么调用呢?要先定义一个指针的变量再传给*MacNo还是要怎么做? 都说了MacNo是被读出的卡机号,那么就是传址的了。 dim l as integer dim m as integer l=GetMacNo(m) if l=0 then label1.caption="卡机号: " & m elseif l=2 then msgbox "PC接收超时" elseif l=3 then msgbox "应答错误" end if

VB调用动态链接库

VB调用动态链接库-[Dll编程] 作为一种简单易用的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等,具体方法可以参见相关文档。下面只以Visual C++5.0为例,介绍一下开发应用于VisualBasic5.0的动态连接库时应注意的问题(本文中所有涉及C/C++语言或编译环境的地方,都以VC5为例;所有涉及VisualBasic的地方都以VB5 为例)。 作为一种32位Windows应用程序的开发工具,VB5生成的exe文件自然也都是32位的,通常情况下也只能调用32位的动态连接库。但是,并不是所有的32位动态库都能被VB生成的exe 文件正确地识别。一般来说,自己编写用于VB应用程序调用的动态连接库时,应注意以下几个方面的问题: 1、生成动态库时要使用__stdcall调用约定,而不能使用缺省的__cdecl调用约定;__stdcall 约定通常用于32位API函数的调用。 2、在VC5中的定义文件(.def)中,必须列出输出函数的函数名,以强制VC5系统将输出函数的装饰名(decoratedname)改成普通函数名;所谓装饰名是VC的编译器在编译过程中生成的输出函数名,它包含了用户定义的函数名、函数参数及函数所在的类等多方面的信息。由于在VC5中定义文件不是必需的,因此工程不包含定义文件时VC5就按自己的约定将用户定义的输出函数名修改成装饰名后放到输出函数列表中,这样的输出函数在VB生成的应用程序中是不能正确调用的(除非声明时使用Alias子句)。因此需要增加一个.def文件,其中列出用户需要的函数名,以强制VC5不按装饰名进行输出。 3、VC5中的编译选项"结构成员对齐方式(structure member alignment)" 应设成4字节,其原因将在后文详细介绍。 4、由于在C中整型变量是4个字节,而VB中的整型变量依然只有2个字节,因此在C中声明的整型(int)变量在VB中调用时要声明为长整型(long),而C中的短整型(short)在VB中则要声明成整型(integer);下表针对最常用的C语言数据类型列出了与之等价的Visual Basic 类型(用于32位版本的Windows)。

一步一步教你用VC和VB调用C++ DLL

Step by Step: Calling C++ DLLs from VC++ and VB 一步一步教你用VC和VB调用C++ DLL. 本系列教程讨论了普通情况下4种使用DLL的方法 从VC++应用程序调用C++ DLL的函数 Visual Studio 6 使创建包含函数或类的动态连接库(DLL) 变得非常容易。 第一步: 打开Visual Studio 然后选择File | New菜单项: 选择Win32 Dynamic Link Library, 输入工程名, 敲OK.

选择A DLL that exports some symbols并单击Finish.在File View里你会看到如下的工程文件: 第二步 在Test.cpp里,你将看到如下代码: // Test.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "Test.h" BOOL APIENTRY DllMain( HANDLE hModule,

DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } // This is an example of an exported variable TEST_API int nTest=0; // This is an example of an exported function. TEST_API int fnTest(void) { return42; } // This is the constructor of a class that has been exported. // see Test.h for the class definition CTest::CTest() { return; } Test.cpp 包含了fnTest 和 CTest::CTest.如果你现在编译Test.dll, 你将会得到一个可以被其他VC++应用程序直接调用的DLL. 允许其他VC++程序调用的关键机制?( key mechanism)就包含在Test.h中: // The following ifdef block is the standard way of creating macros // which make exporting from a DLL simpler. All files within this DLL // are compiled with the TEST_EXPORTS symbol defined on the command line. // This symbol should not be defined on any project that uses this DLL. // This way any other project whose source files include this file see // TEST_API functions as being imported from a DLL, whereas this DLL // sees symbols defined with this macro as being exported. #ifdef TEST_EXPORTS #define TEST_API __declspec(dllexport)

VB6.0调用C# Dll解决方法

VB6.0调用C# Dll解决方法 在工作中遇到了在VB6.0的程序里要调用C#的Dll的问题,显然这两个开发环境属于不同的平台。在网上拜读了几位大师的文章后,在实际试验中还是会发生这样那样的问题,最后还是实现了预期效果,在此我把我的实验步骤和注意事项分享如下,希望对需要之人有所帮助: 实验环境: C#dll的创建使用的是VS2010;VB6.0 一、C#部分 1.用C#创建一个TestVB项目(VS2010); 2.所有在VB6中要使用的方法都必须通过继承接口实现,并且为public的(非常重要,没有继承接口实现的方法,在VB6.0里面无法调用); 3.接口和类都需要加入属性Guid;

Guid通过VS2010自带的工具得到: 4.在VS2010的DOS命令工具提示框中运行: sn -k C:\myKey.snk<回车> 在C盘根目录下生成一个强名称文件:myKey.snk(注意这个强名称文件的名字可以自己定义,我暂定为myKey.snk) 5. 右击项目,选择属性,打开并编辑项目的属性对话框 在Application tab中,点击Assembly Information按钮,在打开的对话框中选中“make Assembly COM-Visible”(重要)

COM-Visible”(重要)。 在Signing Tab中引入上一步创建的强名称文件myKey.snk

不为1.0.*,应该是一个具体的值; 7.编译这个项目,生成dll文件。

到此为止,C#的Dll部分已经准备完毕了。 二、VB6部分 1. VB6调用环境必须安装.Net framework 4.0或以上版本,最好是4.0(和VS2010相同的framework); 2. 复制dll文件进入VB6环境的目标文件夹,例如D:根目录, D:\TestCom.dll 3. 在Dos命令窗口用regasm命令注册这个dll文件生成.tlb文件 regasm D:\TestCom.dll /tlb:D:\TestCom.tlb /codebase 在D:\将会生成一个TestCom.tlb文件 4.在Dos命令窗口用gacutil命令添加Dll文件到GAC中(全局程序集缓存),这样这个Dll文件在这个PC中就可以随处使用 gacutil /I D:\TestCom.dll 5.在VB6项目中,把生成的.tlb文件加入到项目(References) 6. VB6代码即可调用tlb文件 Private Sub Command1_Click() Dim a As New TestVB.Crypt https://www.doczj.com/doc/063659062.html,mand1.Caption = a.Encrypt("aa", "bb") End Sub 注意:以上3,4步,需要在VB6环境的C:\WINDOWS\system32下面有相应的exe 文件才可运行;第4步,可以省去; 还要说明的是,当转移这个VB6生成的exe程序(这个VB6可执行文件引用了 C#的dll)到另外一台电脑上的时候,需要把这个C# Dll文件一同Copy到那台电脑上,并且重新执行第3步的注册生成tlb文件的工作,否则这个exe程序无法运行。

在VB中 相对路径引用 DLL

在VB中通过相对路径引用标准DLL 很长时间以来,都认为只能通过绝对路径引用标准DLL中的函数。其实,你也可以用相对路径。 1)绝对路径方法 比如你的DLL文件位于c:\testDLL\debug\testDLL.dll 一般来说,你需要在VB中作如下声明 Declare Sub mytest Lib "c:\testDLL\dubug\testDLL.dll" (ByVal x As Long) 另外的一个变通方法是把testDLL.dll放在windows的系统目录下,这样,你就可 以直接引用文件名了。不过,需要把一个文件放到windows系统目录下,很是不爽! 2)相对路径方法 看看我们如何用相对路径,假设你的DLL文件位于 c:\testDLL\debug\testDLL.dl l,你的VB程序位于目录c:\testDLL\vbClient 你可以在VB程序中作如下声明:

Declare Sub mytest Lib "../dubug/testDLL.dll" (ByVal x As Long) 如果直接运行你的VB程序,系统会提示错误:找不 到../dubug/testDLL.dll. 为了使上面的声明其作用,先暂时关闭你的VB工程。然后用一个文本编辑器(notepad,editplus,etc)打开工程文件 *.Vbp,通常vbp文件由几个部分组成,比如我的vbp有两部分:Type=Exe Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0 #0#..\..\..\..\WIND OWS\System32\stdole2.tlb#OLE Automation Form=Form1.frm Module=Module1; Module1.bas Startup="Form1" ExeName32="Project1.exe" Command32="" Name="Project1" HelpContextID="0" CompatibleMode="0" MajorVer=1

相关主题
文本预览
相关文档 最新文档