本帖最后由 HGP7561 于 2011-4-15 10:57 编辑
CVI生成动态连接库(DLL)步骤简介 本文假设需要创建动态连接库(以下简称DLL)的代码已经编辑完成。
首次,创建一个单独的.C文件,名字任意,我在这里称为dll.c。 在代码编辑窗口中选择菜单项【Edit】/【Insert Contruct】/【Dll Main】,生成两个函数:DllMain和DllEntryPoint。
#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头文件中的全局变量前加上这两个关键词的其中一个就可以了。
到此为止,我们讲述了如何产生动态连接库以及如何使用,还提及了一些全局变量的注意事项,希望对大家有所帮助,谢谢。
|