本文假设需要创建动态连接库(以下简称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
();
}
return 1;
}
int __stdcall
DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
/* Included for compatibility with Borland
*/
return DllMain (hinstDLL, fdwReason, lpvReserved);
}
|
然后,选择菜单项【Build】/【Target Type】/【Dynamic Link Library】。
接下来,选择菜单项【Build】/【Target Settings】:
Dll file : release;
点击Change:选择Include files and Marked Symbols;
其他保持默认值就可以了。
配置好设置以后,我们就可以生成DLL文件了。按快捷键【Ctrl+M】,如果运行成功,就会出现一下类似对话框:
我们生成里.dll文件,就是我们需要的。在应用程序调用中,我们还需要的就是你所使用的所有的.h头文件。
接下来,讲述一下如何调用.dll文件,以及使用全局变量需要注意的地方。
首先,将.dll和头文件复制到应用程序的工程目录;
然后,打开应用程序的工程(.cws)。编译一个上述头文件的头文件(即将上述的头文件用一个头文件包含,我们称其为test_lib.h),将test_lib.h加入到应用程序的工程中。
接下来,双击test_lib.h后,选择菜单项【Option】/【generate Dll import library】,如下图所示,
点击以后,将生成一个.lib文件(我们称其为test.lib)。将test.lib文件加入到工程中。这样,我们就可以成功使用DLL文件了。
注意:刚才我们生成dll文件的同时也生成里一个.lib 文件,那个文件跟这个文件是一样的,都是动态连接库的导入库。我们之所以这样麻烦的再生成,目的是在只提供dll和头文件的情况下,让大家知道怎样来生成lib文件。
最后,我还要说明一下在CVI中如何使用dll文件中的全局变量。我们需要使用两个关键词__export 和__declspec(dllimport):
__export声明的全局变量,不管初始化多少,应用程序都是0;而__declspec(dllimport)则可以保持全局变量的初始化值。
需要注意的一点是,这两个全局变量的关键词用在应用程序的头文件中,而不是dll的头文件中,也就是说,如果你的应用程序想使用dll的全局变量,只需要在应用程序对应的dll头文件中的全局变量前加上这两个关键词的其中一个就可以了。
到此为止,我们讲述了如何产生动态连接库以及如何使用,还提及了一些全局变量的注意事项,希望对大家有所帮助,谢谢。
阅读(3166) | 评论(0) | 转发(0) |