VC++代码转换成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_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调用matlab的m.文件生成的dll.文件
Matlab函数转换为VB可用的DLLMatlab函数转换为VB可用的DLL段晓君摘要:一种利用Matcom将Matlab函数转换为VB中可用的动态链接库的方法,操作简单易行。
关键词:Matlab函数动态链接库DLL M-文件VB语言1 Matlab简介Matlab是MathWorks公司开发的一种工程计算语言。
它是一个交互系统,在Matlab 中的基本数据元素是一个不要求维数的复矩阵。
用Matlab可解决很多工程计算问题,特别是涉及到矩阵和矢量形式的问题。
Matlab是一个高度集成的语言环境,在它的界面下可以编写程序、运行程序并可进行跟踪调试。
对于广大的工程技术人员和科学研究人员来说,Matlab不失为一种很好的工具。
Matlab也有局限性,一般它不能脱离Matlab集成环境工作;而且编写界面的功能比较弱。
Matcom是一个从Matlab到C++的编译器,它可以节省用户的运算时间和内存要求。
MathTools公司利用Matcom技术编写了Mideva工具软件,它可以借用C++编译器将Matlab下的M-文件转换为可被Visual Basic、Excel以及Delphi调用的DLL 动态链接库或者是独立的可执行文件。
本文就M-文件到DLL的转换以及在VB中调用这一类DLL 的2个问题做了一些探讨。
文中针对Matlab5.0、VC5.0、VB5.0、Matcom4.0或相应的更高版本的软件进行了讨论。
2 M-文件到DLL的转换要将一个m-文件编译成DLL,需进行如下操作:启动运行Matcom4的Mideva,点击菜单File/Compile to dll,选择要转换的m-文件(该文件应该是能够作为函数被其它集成环境调用的m-文件,假设文件名为yourfile.m)。
值得注意的是,Mideva对M-文件有一定的要求,即该文件必须是1个函数,如果要编译没有输入也没有输出的脚本文件,可以先在Matlab中将它编辑成无输入无输出的函数,再按照上述操作进行转换。
visual studio编写vba
visual studio编写vba摘要:1.VBA 简介2.Visual Studio 与VBA 的关系3.使用Visual Studio 编写VBA 的步骤4.实例:使用Visual Studio 编写一个简单的VBA 程序5.总结正文:一、VBA 简介VBA(Visual Basic for Applications)是一种由微软公司开发的,基于Visual Basic 的编程语言。
它主要用于开发Microsoft Office 应用程序(如Word、Excel、Access 等)的自定义功能和宏。
通过使用VBA,用户可以轻松地创建自定义的工具栏、菜单和快捷键,以提高工作效率。
二、Visual Studio 与VBA 的关系Visual Studio 是由微软公司开发的一款强大的集成开发环境(IDE),它可以用于开发各种类型的应用程序。
在Visual Studio 中,有一个叫做Visual Basic 的编程语言,它与VBA 有一定的关系。
虽然它们不是完全相同的语言,但它们在语法和功能上有很多相似之处。
使用Visual Studio 可以帮助我们更方便地编写和调试VBA 代码。
三、使用Visual Studio 编写VBA 的步骤1.安装Visual Studio:首先,需要在计算机上安装Visual Studio。
可以从微软官网下载并安装最新版本的Visual Studio。
2.打开Visual Studio:安装完成后,运行Visual Studio 并进入开发环境。
3.创建新项目:在Visual Studio 中,选择“文件”>“新建”>“项目”,然后选择“Visual Basic”作为项目类型。
为新项目指定一个名称和位置,然后点击“创建”。
4.编写VBA 代码:在新创建的项目中,可以编写VBA 代码。
Visual Studio 提供了丰富的代码编辑功能,如自动补全、高亮显示等,可以提高编程效率。
VC VB上位机编程
我虽然做了两年工控,但还是从楼上的前辈的帖子里第一次听说SCADA这个东东,我所在的环境就是缺少那种能指导我或者与我交流的人,或许这才是更重要的原因吧。
我已经换工作了,应该算是做MIS,不过也有手机方面的,也不是按我所说的划分的那么严格。不过还是很想跟朋友们交流想法,不结贴。
如下是俺的观点,欢迎拍砖!
1.物以稀为贵!我也是这个行业的,做了楼宇智能化5年了,工资就不说了,只是告诉你不是很少。诚如所言工控行业的,软件程序员太少,所以这个行业的程序员含金量比较高。因为入行不易,设计到各个硬件打交道。
2.什么叫商业软件,工控软件就不叫商业软件了么?这点我不敢苟同!在控制领域,你看看各个强势的一线品牌的软件,那个不是商业软件。如果你所喜欢的商业软件是什么oa,mis,erp;你就会发现你将陷入需求变化的无休止的争论中。
计算机系本科毕业,用VC做了2年多的工业控制软件。
现在不知道该不该继续做下去。
很想和做这个领域的兄弟聊一聊,不知道是不是我的视野窄了。
我现在做的都是些一两个人就能搞定的小软件(虽然外面称之为大型系统)。
一方面,我想继续做工业控制软件,因为这种东西用途很广,各行各业的,凡是需要与计算机连接的机器,仪表等等都用得着,而且结构和所用的技术也大同小异。
3.如果觉得你们公司不行,确实可以考虑换各公司,但是建议不要轻易的换行业。因为如此的话,你发现你从来都是一个入行者。工资会符合你的角色。如果你有决心把某块软件做大,你可以做规划,建立团队,不过这些都要靠开明的老板。
4.最后,无论在那个行业,当你发现你在公司的地位是不可替代的,工资就不会有问题。
c代码转换成java代码
C代码转换成Java代码一、背景介绍在软件开发领域,C语言是一种广泛使用的编程语言,而Java语言则是另一种非常流行的编程语言。
由于两种语言的语法和特性存在一定差异,有时候需要将已有的C代码转换成Java代码。
本文将详细介绍如何进行C代码到Java代码的转换。
二、C代码和Java代码的差异C语言和Java语言在语法和特性上存在一些差异,主要包括以下几个方面:1. 数据类型C语言中的数据类型和Java语言中的数据类型并不完全一致。
例如,C语言中有指针类型,而Java语言中没有。
在进行C代码转换成Java代码时,需要注意数据类型的转换。
2. 内存管理C语言中使用手动内存管理,而Java语言中使用垃圾回收机制进行自动内存管理。
在进行C代码转换成Java代码时,需要注意对内存管理的处理方式的转换。
3. 异常处理C语言中没有内置的异常处理机制,而Java语言中有完善的异常处理机制。
在进行C代码转换成Java代码时,需要注意对异常的处理方式的转换。
4. 面向对象C语言是一种面向过程的编程语言,而Java语言是一种面向对象的编程语言。
在进行C代码转换成Java代码时,需要将面向过程的代码转换成面向对象的代码。
三、C代码转换成Java代码的步骤将C代码转换成Java代码的过程可以分为以下几个步骤:1. 代码分析首先,需要对C代码进行仔细的分析,了解代码的功能和结构。
可以通过注释和代码注释来理解C代码的逻辑。
2. 数据类型转换根据C语言和Java语言的数据类型差异,将C代码中的数据类型转换成Java代码中的对应数据类型。
例如,将C语言中的int类型转换成Java语言中的int类型。
3. 内存管理转换根据C语言和Java语言的内存管理差异,将C代码中的手动内存管理转换成Java 代码中的垃圾回收机制。
例如,将C语言中的malloc函数调用转换成Java语言中的对象创建。
4. 异常处理转换根据C语言和Java语言的异常处理差异,将C代码中的错误处理转换成Java代码中的异常处理。
VB与VC混合编程技术的研究
20 0 8年 1 O月
计 算机 应 用与软件
Co mpu e p i ain n ot r trAp lc to s a d S fwa e
Vo. 5 No. 0 12 1 0c .2 0 t 08
V 与 V 混 合 编 程 技 术 的 研 究 B C
Ab t a t sr c
VB h st e a v n a e o r g a a h d a tg fp o r mmi g i h u ef i l u c in fa w oe s se O h t e a d, a c o l h t e n t e s p r c a f n t s o h l y t m. n t eoh rh n VC c n a c mp i n i o s h
L i g a g i a jn X n i
(colfC m ue a dC m nct nE gnen , h nsaU i rt o i c n eh o g , h nsa4 0 7 Haa , hn ) Sho o p t n o mu i i n i r g C agh nv sy fS o r ao ei e i c n d o
李 湘 江
( 沙理工大学计算机与通信工程学 院 长 湖南 长沙 40 7 ) 10 6
摘
要
V B具 有 快 速 实现 系统 顶 层 功 能 的优 点 , V 能很 好 地 完 成 底 层 操 作 。介 绍 如 何 结 合 这 两种 语 言 的 优 点 进 行 混 合 编 程 而 C
的几种方法 , 通过具体实例演 示它们的应用。并且对混合编 程 中需要注意的 问题也进行 了阐述。
用性 , 缩短软件 的开发周期 ; 开发 出无法用单一语言实现的功 能
用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
vb、vc编码规范
VB、VC编码规范目录1.VB 部分 (3)1.1.控件前缀 (3)1.2.数据访问对象(DAO)前缀 (5)1.3.菜单前缀 (5)1.4.其它控件前缀 (6)1.5.变量、常量范围前缀 (6)1.6.变量、常量类型前缀 (6)1.7.描述变量和过程名 (7)1.8.用户定义的类型 (7)1.9.代码注释约定 (7)1.10.窗体隐含全局变量 (9)1.11.命名属性、方法和事件 (9)1.12.常数使用 (9)1.13.MsgBox书写要求 (9)1.14.SQL语句书写要求 (10)1.15.源程序编排 (10)1.16.源文件命名 (11)1.17.资源ID (11)2.VC部分 (12)2.1.C++类的定义形式约定表 (12)2.2.头文件的书写顺序约定表 (12)2.3.源文件的书写顺序约定表 (12)2.4.标识符命名约定表 (13)2.5.函数头说明规范 (13)2.6.修改申明 (13)3.窗体和控件的取名:详见命名标准 (14)4.显式声明变量 (14)5.为便于阅读程序,禁止使用VB的“字符串和数字的自动转化功能” (14)6.在程序中禁止使用END语句 (15)7.为增强可读性,不得使用控件值 (15)8.修改代码注释: (15)在原来有错误的代码前先列出,修改人,修改原因,修改日期;注释原代码,写出新代码,写出新代码结束标志 (15)1.VB 部分1.1.控件前缀1.2.数据访问对象(DAO)前缀1.3.菜单前缀菜单控件除了最前面 "mnu" 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。
下表列出了一些例子。
当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在Visual Basic 的“属性”窗口中。
而且,菜单控件的名字清楚地表示出它们所属的菜单项。
1.4.其它控件前缀对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。
从VC++ 编辑的DLL过程(或函数)向VB 传递字符串的方法(简单实用版)
//
function, even before any object variable declarations
//
as their constructors may generate calls into the MFC
//
DLL.
//
//
Please see MFC Technical Notes 33 and 58 for additional
1.2 将字符串传递到使用自动化的 DLL
某些 DLL 是专门使用 BSTR 等自动化数据类型的,它们利用了自动化提供的若干过程。 因为 Visual Basic 使用自动化数据类型作为自己的数据类型,所以能够使用引用方式将 Visual Basic 参数传递到需要自动化数据类型的任何 DLL。因此,如果 DLL 过程需要以 Visual Basic 字符串作为参数,
//
details.
//
///////////////////////////////////////////////////////////////////////////// // CClock2008dllApp
BEGIN_MESSAGE_MAP(CClock2008dllApp, CWinApp) //{{AFX_MSG_MAP(CClock2008dllApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP
if (hDevice == INVALID_HANDLE_VALUE) {
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做的数据库通⽤类。
VC访问VB的ActiveX.dll
方法 2 - #IMPORT:
1. 启动 VisualC++6.0 并创建 Win 32 控制台应用程序。 选 择 " An 空项目 " 并单击完成。 2. 指向项目菜单上, 单击新建将新 C++ 源文件添加到项目 上添加到项目。 将以下代码粘贴到新源文件并保存: #include <stdio.h> // This is the path for your DLL. // Make sure that you specify the exact path. #import "c:\project1.dll" no_namespace void main()
如何从 VisualC++6.0 可执行文件访问 VisualBasicActiveXDLL 本文介绍三种方法可以从 VisualC++6.0 访 VisualBasicActiveXDLL 执行。 1.创建 VisualBasicActiveXDLL 项目。 默认情况下创建 Class 1。 2.以下代码添加到 Class 1: Public Function MyVBFunction(x As Integer) As Integer MsgBox x End Function 3.编译 DLL 作为 c:\Project1.dll 并退出 Visualpatch:
1.启动 VisualC++ 并在文件菜单上选择新建。 选择 MFC 应 用程序向导 (Exe) 和项目名称和 Click 确定。 出现 MFC 应用程序 向导对话框, 时单击完成。 在下一个对话框中单击确定。 2.在视图菜单上选择 ClassWizard, 在类名称框中, 选择 Ctst1App 并双击 InitInstance 消息中。 单击编辑代码以对于 BOOL CTst1App::InitInstance() 调出代码、 查找行 AfxEnableControlContainer();,: 并添加以下行之前 AfxOleInit(); 3.从视图菜单中选择 ClassWizard 单击 Click AddClass 自 动化选项卡并选择 " 从 TypeLibrary "。 指定 Project 1 .dll, VisualBasic DLL 是步骤 3 中创建它。 当出现确认类对话框, 单击 确定。 单击确定以关闭 MFCClassWizard 对话框中再次。 4.打开 App 名 > .cpp 文件并添加行 # include " Project1.h "。 您需要包括 Project1.h 只要您有访问 project1.dll 代码。 5.再次打开 ClassWizard。 在消息映射选项卡, 选择 @ @ ClassName@@ @ 框和对象 ID 中, IDOK 中 CAboutDlg, 然后双击 BN _ CLICKED。 以响应对话框并确定以关闭 ClassWizard 再次单击 确定。
VC++6.0版本程序转成VS2010版
VC++6.0版本程序转成VS2010版直接转换的时候遇到两个问题:1、预编译头文件*.PCH找不到2、static_cast”: 无法从“void (__thiscall CView2::* )(void)”转换为“LRESULT (__thiscallCWnd::* 1、来源:/archives/2231错误:fatal error C1083: 无法打开预编译头文件:“Debug\xxx.pch”: No such file or directory“Rebuild All”没有解决,然后把“C/C++”属性中的“预编译头”由“使用(/Yu)”改为“创建(/Yc)”,问题解决了。
看来还是预编译头文件xxx.pch创建的有问题,仔细想一下,vc工(其实起作用的是stdafx.h,但头文件不参加编译,程的预编译头是由stdafx.cpp编译生成的。
所以需要stdafx.cpp文件,这个文件里只有一句代码:#include “Stdafx.h”。
)综上:最妥善的解决方法就是,在工程属性中,选择“使用(/Yu)”预编译头,而单独将stdafx.cpp设置为“创建(/Yc)”预编译头。
关于“预编译头”的作用,参考如下:在很多程序中,每个源文件都存在一些相同的部分。
比如要包含相同的一些头文件,而且这些头文件可能很长,例如window.h。
如果用普通的方法编译这些源文件,对这些头文件在每个源文件中的出现都要重新编译,作了很多重复工作。
如果能将这些头文件专门进行编译,并且把结果存储起来。
然后在编译包含这些头文件的源文件时,使用上述结果替代头文件在源文件中的出现,就可以大大减少工作量。
Microsoft Visual C++提供的“预编译头文件”机制就支持这一功能。
所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常以.pch为扩展名),这个文件就称为预编译头文件。
这些预先编译好的代码可以是任何的C/C++代码——–甚至是inline的函数,但必须是稳定的,在工程开发的过程中不会被经常改变。
C#调用VB_net创建的Dll
一、由 创建 Dll 1、打开 Visual Studio 2010,选择其它语言中的 Visual Basic, 创建新解决方案类型为类库,名称为 ClassLibrary3,并选择好保存 位置,截图如下。
2、由菜单“项目(P)”→“添加 Windows 窗体(F)...”添加一个 窗体 Form1,将其“Text”内容改为“ 的窗体” ,并在窗体上 放置一个标签 Label1 和一个命令按钮 Button1。Label1 的“Text” 内容不作更改(即采用默认值) ,Button1 的“Text”内容改为“结 束” ,截图如下。
6、由菜单“调试(D)”→“启动调试(S)或者按“F5” ,进行调 用 创建的 Dll 测试,分别在加号“+”左侧、右侧的文本框中 输入数值 50 和 21,单击按钮“显示 的窗体”和按钮“调用 的求和函数” ,得到结果如下图所示,表明成功调用了 创建的 Dll。
3、双击 Form1 窗体及命令按钮 Button1,添加如下的代码:
即:
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Label1.Text = "你用C#成功调用了创建的Dll!" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tton1.Click Me.Dispose() End Sub End Class
C#项目转换为VB.NET
i.
不用转换
存储的是uid那取到之后还有用这些uid去其他地方获取用户详情才能供页面展示
C#项目转换为
1. 项目转化
a) 确定要转化的项目
i.
非转化C#项目可以与VB项目共存
b) 建立相应的VB项目
i.
将所属文件移入该项目,逐个转换
2. 项转化
a) 准备
i.
转换工具
b) 脚本类转化
i.
包含设计类
ii.
ห้องสมุดไป่ตู้
事件处理
1. C#在各个控件处绑定其要引用的事件
2. VB在各个事件处指名其绑定的控件
a) 要求相应控件的修饰符为 Friend WithEvents,而非默认的private
c) 窗体设计类转化
i.
VB无专门的窗体设计类
ii.
由C#设计类转换来的文件将作为VB脚本类的一部分,放在VB脚本类的开始
d) 资源文件转化
visio vbc编程 -回复
visio vbc编程-回复Visio VBA编程,也称为Visio Basic编程语言,是一种用于在Microsoft Visio中自动执行任务和操作的编程语言。
通过编写VBA代码,可以使用Visio的对象模型来访问和控制Visio应用程序的各个部分,包括图形、页面、层、形状和连接线等。
本篇文章将一步一步回答关于Visio VBA编程的一些常见问题和技巧。
第一步:了解Visio VBA编程的基础知识Visio VBA编程是基于Microsoft Visual Basic for Applications (VBA)语言的,因此,熟悉VBA的基本语法和概念是很重要的。
如果您以前有VBA编程的经验,那么您会很快适应Visio VBA编程。
如果您不熟悉VBA,您可以通过在线教程或书籍来学习它。
第二步:打开Visio VBA编辑器要编写Visio VBA代码,您需要打开Visio VBA编辑器。
要打开编辑器,请打开Visio应用程序并转到“开发工具”选项卡。
在该选项卡上,您会找到一个名为“宏”的按钮,点击它将打开Visio VBA编辑器。
在编辑器中,您可以编写和运行VBA代码。
第三步:编写第一段VBA代码现在,您可以编写您的第一段Visio VBA代码了。
您可以从简单的代码开始,例如创建一个新的Visio文档,然后添加一些形状和文本。
以下是一个示例代码:Sub CreateNewDiagram()Dim visApp As New Visio.ApplicationDim doc As Visio.DocumentDim page As Visio.PageDim rect As Visio.ShapeDim text As Visio.ShapeSet doc = visApp.Documents.Add("")Set page = doc.Pages(1)Set rect = page.DrawRectangle(1, 1, 4, 3)Set text = page.DrawText(2, 2, "Hello, Visio!")visApp.Visible = TrueEnd Sub这段代码使用Visio对象模型创建了一个新的Visio文档,并在该文档的第一页上添加了一个矩形和一个文本框。
C与VB的类型转换
HWND, HDC, HMENU ByVal variable As Long 结果为 Long 类型的表达式等Windows 句柄
INT, UINT ByVal variable As Long 结果为 Long 类型的表达式
LONG ByVal variable As Long 结果为 Long 类型的表达式
CHAR ByVal variable As Byte 结果为 Byte 类型的表达式
COLORREF ByVal variable As Long 结果为 Long 类型的表达式
DWORD ByVal variable As Lriable As Integer 结果为Integer 类型的表达式
LRESULT ByVal variable As Long 结果为 Long 类型的表达式
NULL As Any 或 ByVal Nothing 或 ByVal variable As Long ByVal 0& 或 VBNullString
LPRECT ByVal variable As type 自定义类型的任意变量
LPSTR, LPCSTR ByVal variable As String 结果为 String 类型的表达式
LPVOID ByVal variable As Any 任何变量(在传递字符串的时候使用ByVal)
c中的数据类型 VB中的声明 结果
ATOM ByVal variable As Integer 结果为Integer 类型的表达式
BOOL ByVal variable As Boolean 结果为 Long 类型的表达式
BYTE ByVal variable As Byte 结果为 Byte 类型的表达式
VC和VB的混合编译
VC和VB的混合编译原理:Visual Basic 从5.0起就可以象C++那样将程序编译成本地码.VB将程序中的每个form, bas, cls, vbp 编译为obj文件,然后再调用连接程序将它们连接成EXE, 这个过程是自动的,连接完成后它会自动删除中介生成的OBJ文件. 要实现我们的目的就需要在连接程序连接输出EXE之前对OBJ文件进行处理,将C++编译的OBJ文件换进去.准备:我们需要自己些一个连接程序,当然这个程序不是要实现连接的功能,只需要实现预先处理 OBJ 文件, 获取VB传递给连接程序的参数, 对参数进行必要的修改, 然后调用原连接程序完成连接工作. 我们将vb目录下的Link.exe 改名为 vblink.exe, 再将我们写的link.exe 放到这个目录中. 这个Fake Link 程序我已经完成了, 在压缩包包中可以找到.先讲讲这个Fake Link 程序是怎么工作的:首先程序取得 VB 传递给连接程序的参数.通过对参数进行分析获取当前所编译的VB工程文件的完整路径.(如:F:\ LinkWithVC\ LinkWithVC.vbp), 然后程序会查找该工程对应的自定义连接配置文件(F:\LinkWithVC\ LinkWithVC_link.ini), 如果找不到程序什么也不做直接调用vblink.exe.如果找到了,就读取里面的设置,按照设置进行相应的处理,最后调用 vblink.exe.InI文件的配置将在下面实践测试中做介绍.实践测试:运行VB6新建一个工程,工程名设为LinkWithVC, 给工程添加一个模块(bas), 名称设为 ModVC.给窗体添加一个按钮名称 cmdTest, 标题 Test. 在ModVC中添加Public Function Test() As LongTest = 9End Function在cmdTest的Click事件中添加代码 msgbox test, 保存工程,编译运行,点击按钮我们会看到是9没错就是 9 .现在我们启动VC6新建一个空的Win32工程名称就叫vcobj,目录就设置为VB工程LinkWithVC所在的目录.在工程中添加一个Generic Class ,类的名称就叫ModVC, 设置活动配置为 Win32 release. 现在就点击 Build 菜单中的 Compile ModVC.cpp 将它编译成OBJ文件.然后在VB工程目录下建一个文件 LinkWithVC_link.ini.在文件中输入如下内容: [Settings]lib=0 log=1[OBJ] F:\LinkWithVC\vcobj\Release\ModVC.obj=F:\LinkWithVC\ModVC.obj[lib] 注:F:\LinkWithVC是VB工程所在目录,F:\linkWithVC\vcobj是VC工程所在目录.Ini文件有三个段.Settings段有lib 它表示需要附加的lib的数量. 相应的lib在lib段中定义. OBJ段就是OBJ替换定义段可以是 vc的obj=vb的obj. Fake Link程序会自动用vc的obj替换vb的obj文件.Log为1表示生成连接记录. 有记录便于排错.好了现在我们切换到VB工程来生成LinkWithVC.exe完了我们会发现并没有生成EXE, 打开log文件看看,会看到如下内容:Microsoft (R) Incremental Linker Version 6.00.8447Copyright (C) Microsoft Corp 1992-1998. All rights reserved.Form1.OBJ : error LNK2001: unresolved external symbol "private: void __stdcall ModVC::Test(void)" (?Test@ModVC@@AAGXXZ)F:\LinkWithVC\LinkWithVC.exe : fatal error LNK1120: 1 unresolved externals看到拉,连接出错了 unresolved external symbol private: void __stdcall ModVC::Test(void) ,这个是正常的,我们替换了ModVC.obj,而我们的VC的modvc.obj并没有定义这个函数.接下来就是解决这个问题了.知道怎么做了吧,…现在切换到VC,在类ModVC中定义一个private的函数void __stdcall Test();函数体先空着.再编译它. 然后切换到VB生成EXE.好了生成了EXE文件了,我们运行它,点击按钮,会看到:是10不是9,显然替换成功了,可是为什么是10呢…我也不清楚….(:P)Void的函数怎么返回值呢? 在Windows中函数返回值一般都是存放在eax中的, 我们来试试.在 Test 的函数体中添加代码 _asm mov eax , 123, 再重复前面的操作生成EXE,运行:在上一回我们已经实现VC,VB代码的混合编译,并成功的在VB代码中调用了VC代码中的一个无参数的函数,并取得了函数的返回值. 这一回我们将实践一下如何调用带参数的函数.打开上一会的两个工程(LinkWithVC, vcobj). 切换到VB在form上添加一个按钮 name: cmdTestLong, 标题 TestLong. 在form上添加一个文本框txtInput 内容填 8. 再在ModVC中添加如下代码:Public Function TestLong(ByVal lng As Long) As LongTestLong = -1End Function在cmdTestLong的Click事件中添加代码 msgbox Testlong(clng(txtInput.Text))现在我们来生成EXE. 显然生成会失败,打开log文件看看.Microsoft (R) Incremental Linker Version 6.00.8447Copyright (C) Microsoft Corp 1992-1998. All rights reserved.Form1.OBJ : error LNK2001: unresolved external symbol "private: void __stdcall ModVC::TestLong(v oid)" (?TestLong@ModVC@@AAGXXZ)F:\LinkWithVC\LinkWithVC.exe : fatal error LNK1120: 1 unresolved externals看到了吗,和第一次看到的错误Log除了函数名,完全是一样的……这时候想到了什么? 参数呢? 在VB 代码中明明是有参数申明的啊? ….先不管它, 和上回一样在VC类中添加一个名为TestLong的同类型的空函数. 编译vc的obj,再生成VB的EXE,运行点击 TestLong按钮, 我们看到msgbox提示8, 和我们的参数8 一样!! 是巧合? 试试改改 txtInput 中的数字. 再点击TestLong按钮. 我们会发现 msgbox提示的和txtInput文本框中的数字是一样的. 有了上回返回值的经验, 而我们的函数什么也没有做, 如是我们会知道这个参数就是存放在 eax中的(注:windows中fastcall的函数参数是采用寄存器传递的), 好了到了这里我们知道怎么在VC代码中获取 vb代码传递的参数了. 可是在传递一个 long 型的数据有什么实际用途呢? 一个 long 它就意味着一个长整形数字、一个句柄、一个指针….我们来看一个实际的例子。
vs 中c语言编译成汇编
vs 中c语言编译成汇编C语言是一种面向过程的编程语言,它的编译过程是将源代码转化为汇编代码,再经过汇编器转化为机器码。
在Visual Studio(简称VS)中,我们可以通过编译器将C语言代码编译成汇编代码。
本文将介绍使用VS中的C语言编译器将C语言代码转化为汇编代码的过程。
在使用VS编译C语言代码时,首先需要在VS中创建一个C语言项目。
打开VS后,选择“新建项目”,然后选择“Visual C++”下的“空项目”,并为项目命名。
接着,在新建的项目中,右键点击“源文件”,选择“添加”->“新建项”,然后选择“C++文件(.cpp)”,并为该文件命名,即可开始编写C语言代码。
在编写完C语言代码后,我们需要进行编译操作。
点击菜单栏中的“生成”->“生成解决方案”,或者按下快捷键Ctrl + Shift + B,即可开始编译源代码。
编译器会将C语言代码转化为汇编代码,并生成一个.obj格式的目标文件。
接下来,我们需要将目标文件转化为可执行文件。
点击菜单栏中的“生成”->“生成解决方案”,或者按下快捷键F5,即可生成可执行文件。
此时,VS会自动调用链接器,将目标文件与所需的库文件进行链接,生成最终的可执行文件。
在编译过程中,VS会调用系统中的汇编器来将C语言代码转化为汇编代码。
汇编代码是一种低级的程序代码,使用符号和指令来表示计算机的操作。
每条汇编指令对应着一条机器指令,它们在机器码中有着一一对应的关系。
汇编代码的语法相对简单,使用助记符来表示指令和操作数。
在汇编代码中,我们可以直接操作寄存器、内存和标志位,实现对计算机的底层控制。
通过编写汇编代码,我们可以更加精确地控制程序的执行流程和数据操作,提高程序的效率和性能。
在使用VS进行C语言编译成汇编的过程中,我们可以通过调试功能来查看生成的汇编代码。
在VS中,点击菜单栏中的“调试”->“窗口”->“汇编”,即可在调试过程中查看汇编代码。
VC与VB混合编程的几种方法
VC与VB混合编程的几种方法
王保华
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2002(000)009
【摘要】@@ 引言rn作为一种简单易用Windows开发环境,它使程序员不必再直接面对纷繁复杂的Windows消息,而可以将精力主要集中在程序功能的实现上,大大提高了编程效率.但凡事有利必有弊.VB高度的封装和模块化减轻了编程者的负担,同时也使开发人员失去了许多访问低层API函数和直接与Windows交互的机会.为了解决这个问题,利用VC与VB混合编程是一种十分有效的选择.用VB快速开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,例如内存的操作、IO端口的操作、多线程处理、数据处理以及端口通讯等,VC中还可以嵌入汇编语言进行更底层的操作.下面具体介绍几种方法.
【总页数】3页(P49-50,56)
【作者】王保华
【作者单位】无
【正文语种】中文
【中图分类】TP3
【相关文献】
1.使用VB6.0和VC++6.0混合编程实现PC机串并行通信的方法 [J], 戴永彬;王艳秋;关维国
2.利用VB与VC混合编程实现数字印花的图像处理 [J], 詹白勺;梅顺齐;陈小兰
3.VB和VC++DLL实现注册模块的混合编程 [J], 黄嵩;周清松
4.VB与VC混合编程技术的研究 [J], 李湘江
5.多种语言混合编程的探讨--浅谈VC与VB的混合编程 [J], 林玉明
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
特别之处:
unsigned char -> byte
unsigned long -> long
unsigned char* -> long(指针) 或 string 建议使用long
lptcstr -> long(指针) 或 string 建议使用long
CopyMemory ByVal VarPtr(strRet), ByVal pStr, 4
if bUnicode then
GetStr =strconv(strRet,vbUnicode)
else
ULONG Long
WORD,DWORD Long
WPARAM,LPARAM Long
WMSG,UMSG Long
HRESULT Long
BOOL Boolean
COLORREF Long
HWND,HDC,HBRUSH,HKEY,等等. Long
LPCSTR lpszTest,HWND hwndParent,UINT wID);
这个函数创建一个StatusBar控件.从WINCOMMCTRLAPI可以得知该函数来自动态 链接库ComCtl32.dll.(有时,我们需要从MSDN中查找某函数对应的DLL) 然后我们知道该函数的返回类型是HWND,对应VB的类型是Long.最后,根据前面提到 类型对应表,很容易的转换相应的函数参数.
GetStr = strRet
end if
End Func参数的动态库函数的提醒
荣士电子 2009-3-13 12:06:59
VB 在调用VC编写的动态库时常常会出现“调用约定错误”,原因VC和VB在机制上的不同。我们在声明和定义方面下点功夫,仍然可以搞定。
在VC++代码中用#define定义常量,而在VB中是用Const来定义,因此转换成VB的代码是:
Public Const STD_COPY=1
第二个例子:
#define LB_SELECTSTRING0x018C //WINUSER.h
这有一个问题,VC++中所有以"0x"开头的值是十六进制,而在VB中表示十六进制要用"&H"开头.因此转换成VB的代码为:
typedef struct tagTBSAVEPARAMSA{
HKEY hkr;
LPCSTR pszSubKey;
LPCSTR pszValueName;
}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;
首先我们需要把第一行的"typedef struct"转换成"Public Type"
Dim mypiccserial(0 To 3) As Byte '卡序列号
Dim mypiccdata(0 To 47) As Byte '卡数据缓冲
控制字指定,控制字的含义请查看本公司网站提供的动态库说明
myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY
End Type
以下是VC++中数据类型对应到VB中的数据类型VC++数据类型VB数据类型
------------------------------------
short Integer
int Long
long Long
UNIT Long
如果使用long 想获取里面的字符串 使用这个函数来获取 指向的地址的字符串
Private Declare Sub CopyMemory Lib "kernel32.dll " Alias "RtlMoveMemory " (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
例如读卡动态库函数的VC声明如下:
unsigned char __stdcall piccreadex(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2)
VC++代码转换成VB代码
对于大多数VB的爱好者来说,在很多情况下都想通过使用API函数来实现一些比较高级的功能或达到某种特殊效果,这就需要用到一些VC++的代码.
本文就如何把VC++代码转换成VB代码给出了一些策略和方法.
1.定义常量
我们首先看第一个例子:
#define STD_COPY 1//COMMCTRL.H
Public Type tagTBSAVEPARAMSA
然后处理结构成员,
HKEY hkr;
LPCSTR pszSubKey;
LPCSTR pszValueName;
对于第一个成员类型HKEY.我们要知道VC++中的以"H"开头的大部分数据类型代表的是某种句柄.在VB中每一个Form对象和许多控件都有一个hWnd属性,它代表所属窗口的句柄.hWnd的类型是Long,并且所有用来存储句柄的变量类型都是Long.因此,该成员在VB中定义为:
mypicckey(4) = &HFF
mypicckey(5) = &HFF
status = piccreadex(myctrlword, VarPtr(mypiccserial(0)), myareano, authmode, VarPtr(mypicckey(0)), VarPtr(mypiccdata(0)))
对于最后一行"}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;"我们只需要用"End Type"取代 就可以了.转换成VB代码后完整的结构为:
Public Type tagTBSAVEPARAMSA
hkr As Long
pszSubKey As String
pszValueName As String
LPSTR,LPCSTR String
LPWSTR,OLECHAR,BSTR String
LPTSTR String
VARIANT_BOOL Boolean
unsigned char Byte
BYTE Byte
VARIANT Variant
(任何以*或**结尾的数据类型) Long
3.函数的转换
我们知道VB提供了API Viewer add-in,但是有很多API函数它并没有包括在内. 因此知道如何把VC++函数转换成VB的函数格式是非常重要的.先看第一个例子:
WINCOMMCTRLAPI HWND WINAPI
CreateStatusWindowsA(LONG style,
'在下面设定断点,然后查看mypiccserial、mypiccdata,
'调用完 piccreadex函数可读出卡序列号到 mypiccserial,读出卡数据到mypiccdata,
'开发人员根据自己的需要处理mypiccserial、mypiccdata 中的数据了。
'处理返回函数
Select Case status
'bUnicode 为是否需要转化unicode 如果是 char *的话 需要 转化
Private Function GetStr(pStr As Long,bUnicode as Boolean)
Dim strRet As String
Const TCN_FIRST=(0-550) 这同样适合以"L"结尾的值
另外,对于 #define CDDS_ITEMPOSTERASE(CDDS_ITEM | CDDS_POSTERASE),我们需要用"Or"来取代"|"
2.结构的定义
我们先看VC++定义的一个比较简单的结构:
初步一看,可能发现为什么VB声明VC的指针不是用byref,而是用一个long来表示地址。实际上在VB6上也就这样才能搞定(微软似乎在做了改进,用byref就行了,合理了很多)。
以下是使用中的代码:
Private Sub Command1_Click()
'轻松读卡
'技术支持:
Const LB_SELECTSTRING = 0x018C
第三个例子:
#define TCN_FIRST(0U-550U)
这里有个特别的是定义的值是以"U"结尾,这是意味着该常量的类型是"unsigned long"(在VB中不支持 该数据类型).但是unsigned long和signed long(在VB中是Long)两种数据类型的值在存储方式上是一样 的,只是表现的形式不同.因此,我们只需要去掉末尾的"U"就可以了.
相应的VB声明如下:
Private Declaer Function piccreadex Lib "OUR_MIFARE.dll"(ByVal ctrlword As Byte, ByVal serial As Long, ByVal area As Byte, ByVal keyA1B0 As Byte, ByVal picckey As Long, ByVal piccdata0_2 As Long) As Byte