引用LabVIEW中调用VC++生成的DLL文件_第1页
引用LabVIEW中调用VC++生成的DLL文件_第2页
引用LabVIEW中调用VC++生成的DLL文件_第3页
引用LabVIEW中调用VC++生成的DLL文件_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、引用LabVIEW中调用VC+生成的DLL文件labview2010-07-0301:32:26阅读146评论0字号:大中小订阅引用Se叩leChan的LabVIEW中调用VC+生成的DLL文件/新建一个空的Win32Dll工程,加入新的cpp,写入下面代码_declspec(dllexport)intsum(inta,intb)returna+b;/Build出一个dll:sum.dll/新建一个新的Win32Console程序选择SimpleConsoleApplication,修改main函数所在的cpp#includestdafx.h#includeusingnamespacestd;

2、/forbasetypeandLoadLibrary#include/definefunctionpointerwhichwillpointtosum(a,b)typedefint(*Func)(int,int);intmain(intargc,char*argv)HMODULEdll=:LoadLibrary(sum.d);/加载刚才那个dll,路经要对if(dll)Funcf=(Func)GetProcAddress(dll,?sumYAHHHZ);/加载那个sum函数if(f)coutf(3,4);/等价于调用sum(3,4)elsecoutfunctioncallerror;elsec

3、outAdvance-CallLibraryFunctionNode调用。调用方式为C,函数原型为longsum(long,long)。运行VI即可得到结果。=8=labview中dll的调用通过labview调用dll文件,我们可以进行cC+代码的复用,减轻编程工作量,便于协同开发,为程序增加新的功能。我们以求平方根为例。首先,需要建立求解平方根的dll文件。以VC6.0编译器为例(注意,labview文档中推荐的编译器包括微软的MSC、VC,布包扩BCB)。首先,新建一个project,选择Win32Dynamic-LinkLibrary类型,我们命名为labSqrt,继续,选择aSimp

4、ledllProject,完成。则一个项目建立起来。注意,上例我们使用的是非MFC的DLL,即不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。每一个DLL必须有一个入口点,这就象我们用C编写的应用程序一样,必须有一个WINMAIN函数一样。在这个示例中,DllMain是一个缺省的入口函数。用这个缺省的入口函数就能使动态连接库被调用时得到正确的初始化。入口函数已经自动生成了,你可以在文件中加入你所想要输出的函数或变量等应用程序使用DLL中的函数之前,应该先导出这些函数,以便供给应用程序使用。要导出这些函数有两种方法,一是

5、在定义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。这里我们采取第一种方法,并且添加关键字externC,它可以使其他编程语言访问你编写的DLL中的函数。externC_declspec(dllexport)voidgetSqrt(doubleinput,double*output);我们完全可以设定求得的平方根为double型返回值(此处我们用的void类型)。使用两个输入参数的原因是,注意一下,output参数是指针类型,我们用它来得到输出的值。为什么不直接用double型浮点数?呵呵,因为C语言的函数调用属于传值调

6、用,在函数内部不能改变参数的值,因此,如果直接用浮点数,那初始是多少,返回就是多少,无法得到求得的平方根。所以,切记,需要得到参数值时,用指针。(当然,直接设置函数的返回值可以得到,但那样只能有一个返回值。使用参数值,我们可以得到多个哦)填充函数体,如下所示l/labSqrt.cpp:DefinestheentrypointfortheDLLapplication./#indludestdafx.h#includemath.hexternC_declspec(dllexport)voidgetSqrt(doubleinput,double*output);BOOLAPPIENTRYDllMai

7、n(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved)returnTRUE;externC_declspec(dllexport)voidgetSqrt(doubleinput,double*output)if(input=0)*output=sqrt(input);else*output=0.0;简单解释一下添加头文件说明#includemath.h因为我们用到了数学函数sqrt()。函数体中首先判断输入是否非负,是则将其平方根付给参数output指针指向的元素,否则将0.0赋予。(此程序完全为了说明而用,可以修改使其功能更加强大)

8、编译通过,生成了labSqrt.dll创建一个labview的vi,在框图中,右键(Functions)ConnectivityLibraries&ExecutablesCallLibraryFunctionNode双击或右键选择Configure,弹出配置对话框。第一个选项卡是Function:第一项需要你选中生成的dll选中以后,第二项中就会出来dll中的函数名getSqrt第三项和第四项不用管,分别是RuninUIthread和C(我们使用的是C,不是windowsAPI);第二个选项卡是Parameters:在里面配置(添加)函数的各个输入参数。首先为return,返回参数,在下面选择对应的void类型。然后点击“+”号,开始添加函数参数第一个参数:名称,随便输入类型,显然我们的第一个参数为数值型(Numeric),double型的(8字节)最后一项当然是value,而不是指针同理第二个参数也是numeric的8字节double但是pass一项为pointtovalue完毕后,下部的phototype显示:void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论