cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1312|回复: 0

CVI生成动态连接库(DLL)步骤和CVI调用DLL方法简介用

[复制链接]
发表于 2011-4-15 10:56:19 | 显示全部楼层 |阅读模式
本帖最后由 HGP7561 于 2011-4-15 10:57 编辑

CVI生成动态连接库(DLL)步骤简介
本文假设需要创建动态连接库(以下简称DLL)的代码已经编辑完成。
首次,创建一个单独的.C文件,名字任意,我在这里称为dll.c
在代码编辑窗口中选择菜单项【Edit/Insert Contruct/Dll Main】,生成两个函数DllMainDllEntryPoint
#include
<cvirte.h>

int __stdcall DllMain
(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{

switch
(fdwReason)
{

case DLL_PROCESS_ATTACH:

if
(InitCVIRTE (hinstDLL, 0, 0)
== 0)

return 0;
/* out of memory */

break;

case DLL_PROCESS_DETACH:

CloseCVIRTE
();


break;
}


return 1;
}

int __stdcall DllEntryPoint
(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{

/* Included for compatibility with Borland */

return DllMain (hinstDLL, fdwReason, lpvReserved);
}
紧接添加所需要程序代码:
void _stdcall GetVirtualKey(int *CapsLock,int *NumLock,int *ScrollLock,int *AsciiA)
{

int asciiA=65;//
表示字母A

*CapsLock=GetKeyState(VK_CAPITAL);

*NumLock=GetKeyState(VK_NUMLOCK);

*ScrollLock=GetKeyState(VK_SCROLL);

*AsciiA=GetKeyState(asciiA);
}
使用GetKeyState()函数要添加:#include <windows.h>
新建.h函数,添加函数申明
void _stdcall GetVirtualKey(int *CapsLock,int *NumLock,int *ScrollLock,int *AsciiA);
保存文件。
保存完成完整项目:.pri,.h,.cws
然后,选择菜单项【Build/Target Type/Dynamic Link Library
然后,选择菜单项【Build/Create Debuggable Dynamic Link Library】或者CTRL+M
开始编译,程序没有程序,自动创建生成三个文件.dll,\ msvc\.lib,.cdb
生成.dll文件,在应用程序调用中,还需要使用所有的.h头文件。

重新建立新项目,把, ,.dll加载到新项目中引用。

接下来,讲述一下如何调用.dll文件,以及使用全局变量需要注意的地方。
首先,将.dll和头文件.h复制到应用程序的工程目录;
然后,打开应用程序的工程(.cws)。编译头文件(即将上述的头文件用一个头文件包含,我们称其为test_lib.h),将test_lib.h加入到应用程序的工程中。
接下来,双击test_lib.h后,选择菜单项【Option/generate Dll import library】,如下图所示,

点击以后,将生成一个.lib文件(我们称其为test.lib)。将test.lib文件加入到工程中。这样,我们就可以成功使用DLL文件了。

注意:刚才我们生成dll文件的同时也生成里一个\
msvc\.lib
文件,那个文件跟这个文件是一样的,都是动态连接库的导入库。
我们之所以这样麻烦的再生成,目的是在只提供dll和头文件的情况下,让大家知道怎样来生成lib文件

如何使用dll文件中的全局变量?
最后,我还要说明一下在CVI如何使用dll文件中的全局变量。我们需要使用两个关键词__export __declspec(dllimport):
__export
声明的全局变量,不管初始化多少,应用程序都是0;而__declspec(dllimport)则可以保持全局变量的初始化值。

需要注意的一点是,这两个全局变量的关键词用在应用程序的头文件中,而不是dll的头文件中,也就是说,如果你的应用程序想使用dll的全局变量只需要在应用程序对应的dll头文件中的全局变量前加上这两个关键词其中一个就可以了。
到此为止,我们讲述了如何产生动态连接库以及如何使用,还提及了一些全局变量的注意事项,希望对大家有所帮助,谢谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-6 17:57 , Processed in 0.443082 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表