Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128712
  • 博文数量: 55
  • 博客积分: 1870
  • 博客等级: 上尉
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-21 20:51
文章分类

全部博文(55)

文章存档

2011年(27)

2009年(3)

2008年(25)

我的朋友

分类: WINDOWS

2008-06-03 09:23:17

本文假设需要创建动态连接库(以下简称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);
}



然后,选择菜单项【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头文件中的全局变量前加上这两个关键词的其中一个就可以了。
到此为止,我们讲述了如何产生动态连接库以及如何使用,还提及了一些全局变量的注意事项,希望对大家有所帮助,谢谢。



阅读(2986) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~