当前位置:文档之家› DLL动态链接库和LIB静态链接库

DLL动态链接库和LIB静态链接库

DLL动态链接库和LIB静态链接库
DLL动态链接库和LIB静态链接库

1:神马是Dll和Lib,神马是静态链接和动态链接

大家都懂的,DLL就是动态链接库,LIB是静态链接库。DLL其实就是EXE,只不过没main。

动态链接是相对于静态链接而言的。所谓静态链接就是把函数或过程直接链接到可执行文件中,成为可执行程序中的一部分,当多个程序调用同样的函数时,内存里就会有这个函数的多个拷贝,浪费内存资源。而动态链接则是提供了一个函数的描述信息给可执行文件(并没有内存拷贝),当程序被夹在到内存里开始运行的时候,系统会在底层创建DLL和应用程序之间的连接关系,当执行期间需要调用DLL函数时,系统才会真正根据链接的定位信息去执行DLL中的函数代码。

在WINDOWS32系统底下,每个进程有自己的32位的线性地址空间,若一个DLL被进程使用,则该DLL首先会被调入WIN32系统的全局堆栈,然后通过内存映射文件方式映射到这个DLL的进程地址空间。若一个DLL被多个进程调用,则每个进程都会接收到该DLL的一个映像,而非多份的拷贝。但,在WIN16系统下,每个进程需要拥有自己的一份DLL空间,可以理解为何静态链接没啥区别。

2:DLL和LIB区别和联系。

DLL是程序在运行阶段才需要的文件。

LIB是程序编译时需要链接的文件。

DLL只有一种,其中一定是函数和过程的实现。

LIB是有两种。若只生成LIB的话,则这个LIB是静态编译出来的,它内部包含了函数索引以及实现,这个LIB会比较大。若生成DLL的话,则也会生成一个LIB,这个LIB和刚才那个LIB不同,它是只有函数索引,没有实现的,它很小。但是这俩LIB依然遵循上个原则,是在编译时候是需要被链接的。若不链接第一个LIB的话,在程序运行时会无法找到函数实现,当掉。若不链接第二个LIB的话,在程序运行时依然会无法找到函数实现。但第二种LIB 有一种替代方式,就是在程序里,使用LoadLibrary,GetProcAddress替代第二个LIB的功能。第一种LIB生成的EXE文件会很大,因为LIB所有信息被静态链接进EXE里了。第二种LIB 生成的EXE文件会比较小,因为函数过程实现依旧在DLL内。

我们可以将静态编译的LIB称为静态链接库。但动态编译的LIB称为引入库。可能会比较好一些。

静态链接LIB的优点是免除挂接动态链接库,缺点是EXE大,版本控制麻烦些。

动态链接DLL的优点是文件小,版本更换时换DLL就好了,缺点是多了点文件。动态链接若是被多个进程使用,会更加方便和节省内存。

3:为什么编译DLL时总会同时生成一个LIB?这个LIB有用吗?

若我们不是用静态链接,而使用DLL,那么我们也需要一个LIB,这个LIB的作用是被链接到程序里,在程序运行时告诉系统你需要什么DLL文件。这个LIB里保存的是DLL的名字和输出函数入口的顺序表。它是有意义的。

当然,若我们的应用程序里不链接这个LIB,则可以使用LoadLibrary,GetProcAddress来告诉系统我们在运行时需要怎么着DLL以及其内的函数。

4:DLL意义。

1:DLL真正实现了跨语言。各种语言都可以生成DLL,而对系统以及应用程序来说,哪种语言生成的DLL是没有区别的。

2:DLL有足够的封装性,对于版本更新有很大好处。因为DLL是运行期间才会使用,所以,即使DLL内函数实现有变化(只要参数和返回值不发生变化),程序是不需要进行编译的。大大提高了软件开发和维护的效率。

3:DLL被多个进程使用,因为有内存映射机制,无需占用更多内存。

5:创建DLL。

(注意:某志就不再讲解使用MFC AppWizard[dll] 方式创建DLL了。有兴趣的自己去百度。这里创建DLL只指使用Win32 Dynamic-link Library创建Non-MFC DLL。,

每个应用程序必须有一个main或者winmain函数作为入口,DLL一样,有自己的缺省的入口函数,就是DllMain。函数如下

BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH: // 进程被调用

case DLL_THREAD_ATTACH: // 线程被调用

case DLL_THREAD_DETACH: // 线程被停止

case DLL_PROCESS_DETACH: // 进程被停止

break;

}

return TRUE;

}

一般情况下,我们不需要对这个缺省的入口函数进行什么修改,它就会使动态链接库得到正确的初始化。但是,当我们的DLL需要额外分配内存或者资源的时候,或者,DLL希望对调用自己的进程或线程进行初始化或清除的额外操作时,可以在上述代码case中加一些自己感冒的东东。(懒……不想细写了- -Orz,现在是晚上2点了,明天还一堆的事情)

DLL对于导出类和导出函数没啥不同。只要加上__declspec( dllexport ) 修饰函数或者类就好了。

但是有查看过DLL代码的人员都会经常见到这么一段代码

#ifdef FK_DLL_EXPORTS

#define FK_DLL __declspec( dllexport )

#else

#define FK_DLL __declspec( dllimport )

#endif

意义很明显,但是,问题是FK_DLL_EXPORTS 这个宏是应该在哪儿定义呢?在DLL项目内,还是在使用DLL的应用程序内?

export是导出。import是导入。对于DLL来说,是要导出这些函数给其他应用程序使用的,所以应当定义FK_DLL_EXPORTS 宏。对于使用DLL的应用程序来说,是导入,是无需定义的。

使用时候也很简单。

class FK_DLL CMyDllClass{} ;

则整个类被导出。

FK_DLL void MyTestFun( int a );

则该函数被导出。

但是有时我们可以见到这样的代码

extern "C" FK_DLL void MyTestFun2( float b );

其中extern "C"的原理就是标示该函数要求以C形式去进行编译,不要以C++形式去编译。具体的编译原理就不罗嗦了,简而言之,被extern "C"定义函数,可以被C以及其他语

言进行DLL调用,而未被extern "C"定义的函数,C是无法访问DLL中这个函数的。

在VS中开发DLL还有一种方式,使用.def文件。

新建个文本文档,改后缀为FKDll.def,加入到工程里。

FKDll.def里加入以下代码

LIBRARY FKDll

EXPORTS

MyTestFun@1

MyTestFun2@2

就可以了。其中,LIBRARY语句是说明.def文件是属于FKDll这个Dll的。EXPORTS下面是我们需要导出的函数名。后面加的@+数字,是表示导出函数的顺序编号。这样就足够了。6:使用DLL

使用DLL有两种方式。显式链接和隐式链接。

隐式链接很容易。直接#progam comment(lib, "FKDll.lib") 就可以。当然,也可以在项目工程->属性->链接库里加上库和路径(相对路径和绝对路径都可以)。

显式链接则麻烦些。在程序中使用LoadLibrary加载DLL,再GetProcAddress获取函数实现,在程序退出之前,调用FreeLibrary来动态释放掉链接库。

例如:

void Main()

{

typedef void (*FKDllFun1)(int a);

FKDllFun1 pFun1;

HINSTANCE hDLL = LoadLibrary("FKDll.dll"); // 若hDll为空则读取Dll失败。

pFun1 = (pFun1)GetProcAddress(hDll, "MyTestFun1" ); // 从应用程序中的DLL镜像中获取名为MyTestFun1 的函数指针

pFun1( 100 );

FreeLibrary(hDll);

}

当然,我们刚才.def里面还指定了导出函数的导出顺序,那么我们可以修改里面获取函数指针那一段为

pFun1 = (pFun1)GetProcAddress(hDll, MAKEINTERSOURCE(1) ); // 1 是刚才指定的MyTestFun1函数导出顺序编号。

7:比较显式链接和隐式链接。

可能的话,尽量使用显式链接。

显式链接可以在程序执行时动态的加载DLL和卸载DLL文件,隐式链接是做不到的。

显式链接LoadLibrary,GetProcAddress时能获知是否加载失败,我们可以对其进行检查错误处理。而显式链接可能是一个很恶劣的提示或是程序崩溃的结果。

对于有些Ex类型的加强函数,显式链接可以允许我们找到替代方案。也包括选择D3d9.dll和OpenGL.dll时也可采用同样处理。

例如:

if( GetProcAddress( hDll, "FKDllFunEx") == NULL )

{

pFun = GetProcAddress( hDll, "FKDllFun"); // 然后使用pFun进行处理

}

8:导出类和导出函数

类和函数的导出方式上面给出了说明,原本极其类似的。

我们说下使用导出类。

若我们隐式的使用了一个导出类,则我们在应用程序里继承它的时候,就如同该类就在应用程序代码里一样,无需任何处理。

例如:

class FK_DLL CMyDllClass{} ; // Dll文件内的代码

-----------------------

class CAppClass : public CMyDllClass // 应用程序内代码,无需做任何处理。

{

....

}

也可以直接使用DLL导出类

void main

{

CMyDllClass* pClass = new CMyDllClass ();

}

但是,若应用程序声明或者分类一个DLL中导出类的对象时会存在一个很讨厌的问题:这个操作会使内存跟踪系统失效,使其错误的报告内存分配和释放情况。

为解决这个问题,我们可以给出两个接口函数对DLL导出类进行创建销毁支持,就可以使内存跟踪系统正常了。例如

class FK_DLL CMyDllClass{} ;

额外增加俩函数

FK_DLL CMyDllClass* CreateMyDllClass(){ return new CMyDllClass(); }

FK_DLL void DestoryMyDllClass( CMyDllClass* p_pClass ){ delete p_pClass; }

上面的方法可以正确进行内存跟踪了,但是,因为DLL导出类CMyDllClass依旧是导出的状态,用户同样可以跳过我们提供的接口直接使用。那么怎么办呢。方法是不再对类进行DLL导出,而对类内的函数全部进行DLL导出即可,

但是若仅仅提供上面两个接口函数以及类内全部函数,的确功能可以实现,却无法进行类继承了。若这个类继承很重要,必须开放,那么就需要使用新的内存跟踪程序替换应用程序内的原有内存跟踪程序。或者使用下面的一个方法。(见模块9:复杂问题)

同样,我们也可以发现,在不导出DLL类本身,而只导出DLL类内函数也有一些好处,一些我们不希望外界知道的函数可以不设置导出标记,这进一步保护了DLL内函数的安全性。9:复杂问题。

若我们使用LoadLibrary显式加载一个DLL,并尝试在应用程序中调用一个类内成员函数的话,无论该函数是否在头文件中有声明,VS会给出一个"unresolved external symbol(未解析的外部符号)"的错误。我们此时可以将项目属性中的内联函数扩展选项修改为"Only __inline"或"Any Suitable"即可。但,我们可能在调试连编的时候期望关闭内联函数扩展,那么另一种解决方案是,将希望导出的函数声明为虚函数,例如

class CMyDllClass

{

FK_DLL virtual void MyTestFun( int a ){ dosth(); }

// 用上面代码替换FK_DLL void MyTestFun( int a ){ dosth(); }

}

这样做还有一个额外的好处。将导出的类成员函数设置为虚函数之后,该虚函数所在的类在应用程序中也如同被声明一样,可以接受继承。

例如若是上面的做法,应用程序就可以进行顺利继承,而不必要求CMyDllClass 被标示为导出。(原理不知,希望精通底层的高手协助解释。)

class CAppClass : public CMyDllClass // 应用程序内代码,无需做任何处理。

{

....

}

was7在Windows下的安装

Window下WebSphere Application Server 7的安装 目录 安装WebSphere Application Server 7 (1) 键入章标题(第2 级) (2) 键入章标题(第3 级) (3) 键入章标题(第 1 级) (4) 键入章标题(第2 级) (5) 键入章标题(第3 级) (6) 一、安装WebSphere Application Server 7 1、单击WebSphere Application Server的安装程序launchpad.exe, 弹出安装欢迎窗口,单击启动WebSphere Application Server-Trial安装向导进行安装如下图: 2、弹出初始化向导窗口,等待初始化完成,如下图

3、弹出安装向导说明,单击下一步,如图 4、弹出软件许可证协议窗口,选择我接受许可证协议的的全部条款,单击下一步,如下图

5、弹出系统必备软件检查窗口,单击下一步 6、弹出选择可选的功能部件,保持默认, 单击下一步,如下图

7、弹出设置安装目录窗口、系统默认安装路径如下图,要改变安装路径,单击【浏览…】,改变安装目录。设置完毕,单击下一步 8、弹出选择要创建的WebSphere应用服务器的环境类型,这里选择“无“,单击下一步如下图

此时会弹出一个警告询问窗体,单击是如图: 9、弹出搜索临时修订窗口,等待完成,单击下一步如图

10、弹出安装摘要窗口,单击下一步如图 11、弹出安装窗口,安装过程可能需要等待一段时间 12、安装完成,弹出安装结果窗口,选中“使用概要管理工具创建新的WebSphere ApplictionServer 概要文件”或开始->IBM_WebSphere->Application Server 7.0->概要管理工具,来启动概要管理工具,创建应用程序服务器单击完成。

C C++动态链接库的创建与调用

C/C++中动态链接库的创建和调用 1.动态链接库的创建步骤: 创建Non-MFC DLL动态链接库 1.打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample project —>工程名:DllDemo 2.新建一个.h文件DllDemo.h 并添加如下代码: #ifdef DllDemo_EXPORTS #define DllAPI _declspec(dllexport) #else #define DllAPI _declspec(dllimport) extern “C” // 原样编译 { DllAPI int _stdcall Max(int a,int b); //_stdcall使非C/C++语言内能够调用API } #endif 3.新建一个.cpp文件,并添加如下代码 #include "DllDemo.h" DllAPI int __stdcall Max(int a,int b) { if(a==b) return NULL; else if(a>b) return a; else return b; } 4.编译程序生成动态链接库 1.2 用.def文件创建动态连接库DllDemo.dll 1、删除DllDemo工程中的DllDemo.h文件。 2、在DllDemo.cpp文件头,删除#include DllDemo.h语句。 3、向该工程中加入一个文本文件,命名为DllDemo.def并写入如下语句: LIBRARY MyDll EXPORTS Max@1 4、编译程序生成动态连接库。 2.动态链接库的调用步骤 2.1 隐式调用 1.建立DllCnsTest工程 2.将文件DllDemo.dll、DllDemo.lib拷贝到DllCnsTest工程所在的目录 3.在DllCnsTest中添加如下语句: #define DllAPI _declspec(dllimport) #pragma comment(lib,”DllDemo.lib”) extern “C” { DllAPI int _stdcall Max(int a,int b);

Cacti内部安装手册

1.IIS –安装IIS服务器。 2.SNMP –安装SNMP服务,正确配置并启动服务。 3.Cacti –提取 cacti-0.8.6h.zip 中的文件到默认网站的路径下,一般为 C:\Inetpub\wwwroot\cacti 4.Cactid –提取cacti-cactid-0.8.6h-cygwin.1. 5.20.zip中的文件到 Cacti路径下。确认cactid.conf.dist文件包含在此文件夹内。 5.RRDTool –提取rrdtool-1.2.15-cygwin-1.5.20.zip中的文件到 C:\rrdtool目录下。 6.PHP - 提取 php-5.1.4-Win32.zip 中的文件到c:\php文件夹. 7.MySQL - 提取mysql-4.1.21-win32.zip 中的文件,安装到默认路径下 C:\Program Files\MySQL\MySQL Server 4.1 。初始root密码设定为:123456。 系统环境:windows 2003+IIS6.0 安装包: php-5.1.4-Win32.zip mysql-4.1.21-win32.zip ActivePerl-5.8.8.819-MSWin32-x86-267479.msi rrdtool-1.2.15-cygwin-1.5.20.zip net-snmp-5.3.1-1.win32.exe cacti-cactid-0.8.6h-cygwin.1.5.20.zip cacti-0.8.6h.zip for win32

配置 PHP 1.添加以下路径c:\php 到已经存在的Windows系统PATH环境变量中. 打开控制面板: 系统 | 高级 | 环境变量 | 系统变量. 2.添加一个新的Windows系统环境变量,名为PHPRC路径为:c:\php. 3.添加一个新的Windows系统环境变量,名为MIBDIRS , 路径为 c:\php\extras\mibs 4.重命名c:\php\php.ini.dist为php.ini, 然后做以下修改: 添加以下几行或取消注释 extension_dir = “c:\php\ext” extension=php_mysql.dll extension=php_snmp.dll extension=php_sockets.dll cgi.force_redirect = 0 5.如果你想导入模版, 取消下面这行的注释: file_uploads = On 6.将来要运行“任务计划”的用户需要被赋予本地MIBDIRS环境变量 下.index文件的修改权限. 配置 Web 服务器 (IIS) 1.运行 Internet Information Services (IIS) 管理器, 右键点击默认网 站选择属性. 2.在主目录标签下,选择配置并点击添加. 浏览选择可执行文件 php4isapi.dll或者php5isapi.dll, 在扩展名中输入 .php 备注: 如果使用 IIS6, 需要允许全部动作和脚本引擎.

VC++动态链接库创建和调用全过程详解

1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 对动态链接库,我们还需建立如下概念: (1)DLL 的编制与具体的编程语言及编译器无关 只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。譬如Windows提供的系统DLL(其中包括了Windows的API),在任何开发环境中都能被调用,不在乎其是Visual Basic、Visual C++还是Delphi。 (2)动态链接库随处可见 我们在Windows目录下的system32文件夹中会看到kernel32.dll、user32.dll和gdi32.dll,windows的大多数API都包含在这些DLL中。kernel32.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作。 一般的程序员都用过类似MessageBox的函数,其实它就包含在user32.dll这个动态链接库中。由此可见DLL对我们来说其实并不陌生。 (3)VC动态链接库的分类 Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。 非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。 由于本文篇幅较长,内容较多,势必需要先对阅读本文的有关事项进行说明,下面以问答形式给出。 问:本文主要讲解什么内容? 答:本文详细介绍了DLL编程的方方面面,努力学完本文应可以对DLL有较全面的掌握,并能编写大多数DLL程序。 问:如何看本文? 答:本文每一个主题的讲解都附带了源代码例程,可以随文下载(每个工程都经WINRAR压缩)。所有这些例程都由笔者编写并在VC++6.0中调试通过。

Compiere在Windows环境下的安装步骤

Compiere资料参考网址 https://www.doczj.com/doc/dd10268563.html, https://www.doczj.com/doc/dd10268563.html,的compiere论坛 Compiere所需软件下载网址: https://www.doczj.com/doc/dd10268563.html,/download/dl_software.htm Compiere安装步骤(Windows环境下) 一.前期准备工作 1.安装Oracle数据库 注意事项:1)Compiere 2.6.3 正式支持的数据库包括Oracle 10g 与Oracle XE 数据库(后者完全免费),但尚未正式支持 PostgreSQL、EnterpriseDB、DB2、SQL Server 等数据库。 2) Oracle XE数据库的安装过程 Oracle 10g数据库的安装过程 3) 测试数据库安装是否成功 2. 安装Java SDK 1.5 Compiere 服务器端需要安装J ava SDK 1.5.0_04 及更高版本。下载后直接安装即可。 重要:安装完成后,必须新建并设置JAVA_HOME 环境变量为上述Java SDK 1.5 的安装路径。在Windows 平台类似下图:

技巧:如果您不熟悉如何设置环境变量,请遵循下述步骤: 1.运行控制面板中的“系统”,打开“系统属性”对话框。 2.切换至“高级”页签,点击“环境变量”按钮。 3.在弹出的“环境变量”对话框中,点击“系统变量”下的“新建”按钮。 4.在弹出的“新建系统变量”对话框中,输入变量名称与变量值后,按确定按钮,然后再次按确定按钮。安装Java 1.5 JRE(运行库) Compiere 客户端需要安装J ava JRE 1.5.0_04 及更高版本。下载后直接安装即可。 二.配置Compiere 服务器 到https://www.doczj.com/doc/dd10268563.html,/download/dl_software.htm 下载 compiere服务器软件无论您使用Oracle XE 还是 Oracle 10g 数据库,下面的执行步骤均相同(特别注明之处除外)。

VC++ MFC DLL动态链接库编写详解

VC++ MFC DLL动态链接库编写详解(2008-07-10 17:38:40) 标签:it分类:com技术然能用DLL实现的功能都可以用COM来替代,但DLL的优点确实不少,它更容易创建。本文将讨论如何利用VC MFC来创建不同类型的DLL,以及如何使用他们。 一、DLL的不同类型 使用VC++可以生成两种类型的DLL:MFC扩展DLL和常规DLL。常规DLL有可以分为动态连接和静态连接。Visual C++还可以生成WIN32 DLL,但不是这里讨论的主要对象。 1、MFC扩展DLL 每个DLL都有某种类型的接口:变量、指针、函数、客户程序访问的类。它们的作用是让客户程序使用DLL,MFC扩展DLL可以有C++的接口。也就是它可以导出C++类给客户端。导出的函数可以使用C++/MFC数据类型做参数或返回值,导出一个类时客户端能创建类对象或者派生这个类。同时,在DLL中也可以使用DLL和MFC。 Visual C++使用的MFC类库也是保存在一个DLL中,MFC扩展DLL动态连接到MFC代码库的DLL,客户程序也必须要动态连接到MFC代码库的DLL。(这里谈到的两个DLL,一个是我们自己编写的DLL,一个装MFC类库的DLL)现在MFC代码库的DLL也存在多个版本,客户程序和扩展DLL都必须使用相同版本的MFC代码DLL。所以为了让MFC扩展DLL能很好的工作,扩展DLL和客户程序都必须动态连接到MFC代码库DLL。而这个DLL必须在客户程序运行的计算机上。 2、常规DLL 使用MFC扩展DLL的一个问题就是DLL仅能和MFC客户程序一起工作,如果需要一个使用更广泛的DLL,最好采用常规DLL,因为它不受MFC的某些限制。常规DLL也有缺点:它不能和客户程序发送指针或MFC派生类和对象的引用。一句话就是常规DLL和客户程序的接口不能使用MFC,但在DLL和客户程序的内部还是可以使用MFC。 当在常规DLL的内部使用MFC代码库的DLL时,可以是动态连接/静态连接。如果是动态连接,也就是常规DLL需要的MFC代码没有构建到DLL中,这种情况有点和扩展DLL类似,在DLL运行的计算机上必须要MFC代码库的DLL。如果是静态连接,常规DLL里面已经包含了需要的MFC代码,这样DLL的体积将比较大,但它可以在没有MFC代码库DLL的计算机上正常运行。 二、建立DLL 利用Visual C++提供的向导功能可以很容易建立一个不完成任何实质任务的DLL,这里就不多讲了,主要的任务是如何给DLL添加功能,以及在客户程序中利用这个DLL 1、导出类 用向导建立好框架后,就可以添加需要导出类的.cpp .h文件到DLL中来,或者用向导创建C++ Herder File/C++ Source File。为了能导出这个类,在类声明的时候要加“_declspe c(dllexport)”,如:

silvaco在windows下安装教程

[原创]Silvaco在windows下的安装方法 ——提供给要学习silvaco软件的各位 首先声明:要安装此版本需要有windows版本的支持,因为linux版本无破解文件,所以我并没有像网上安装一样安装服务在linux版本下,我安装服务在windows,linux从windows 获得服务,从而开启linux下的silvaco。(本教程及软件是给那些想要学习silvaco软件的,请勿用于任何其他商业用途) 本教程从安装windows的silvaco开始到虚拟机一直教到大家将silvaco安装完成为止。。 首先告诉大家此教程是在windows xp下操作的,如果是vista用户,操作有些不同,我会慢慢提出来。 安装windows xp版本的silvaco ,这个网上都有: 1、安装TCAD 2007.04,如果作为LICENSE服务器,请选择安装SFLM server。然后在系统服务里停止: Standard Floating License Manager (SFLMSERVERD),如果有这个服务的话。 2、把rpc.sflmserverd.exe拷贝到下面的路径: sedatools\lib\rpc.sflmserverd\8.0.3.R\x86-nt 替换原来的文件。 3、在快捷方式中运行Start Server 确保下面的系统服务启动: Standard Floating License Manager (SFLMSERVERD) 会要你设密码,随便写一个就行。 4、通过IE http://127.0.0.1:3162进入SFLM设置,通过SFLM在线获取该电脑的SFLM_ID。可能得到的格式如下:0SSMID12345678,也可能是比这个复杂多的形式 5、修改Silvaco.lic中下面的一行,替换为4中你申请到的SFLM_ID。 LM_HOSTIDS XXX 6、拷贝修改后的Silvaco.lic到下面路径: C:\sedatools\etc\license 7、通过SFLM Access,正常选择安装Silvaco.lic。 8、检查license状态,所有license现在应该正常可用了。 9、设置局域网其他用户到该PC的ip地址获取license。 所有人应该正常可用。 (我需要提出的是:如果你是vista用户请注意,虽然xp版本的也能使用,不过要注意如何操作,在开启和关闭服务的时候如果不能关闭,也就是复制破解exe覆盖文件时不能覆盖,请注意请在关闭和开启服务时右击“以管理员身份运行”,这样就能正常使用了。)

演练:创建和使用动态链接库 (C++)

Visual C++ 指导教程 演练:创建和使用动态链接库(C++) Visual Studio 2010 其他版本 0(共1)对本文的评价是有帮助评价此主题 我们将创建的第一种类型的库是动态链接库(DLL)。使用DLL 是一种重用代码的绝佳方式。您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。 本演练涵盖以下内容: ?创建新的动态链接库(DLL) 项目。 ?向动态链接库添加类。 ?创建引用动态链接库的应用程序。 ?在控制台应用程序中使用类库的功能。 ?运行应用程序。 系统必备 本主题假定您具备C++ 语言的基础知识。如果您是刚开始学习C++,建议您参阅Herb Schildt 编写的“C++ Beginner's Guide”(《C++ 初学者指南》),该书可从 https://www.doczj.com/doc/dd10268563.html,/fwlink/?LinkId=115303在线获得。 创建新的动态链接库(DLL) 项目 1.从“文件”菜单中,选择“新建”,然后选择“项目…”。 2.在“项目类型”窗格中,选择“Visual C++”下的“Win32”。 3.在“模板”窗格中,选择“Win32 控制台应用程序”。 4.为项目选择一个名称,如MathFuncsDll,并将其键入“名称”字段。为解决方案选择一个名 称,如DynamicLibrary,并将其键入“解决方案名称”字段。 5.单击“确定”启动Win32 应用程序向导。在“Win32 应用程序向导”对话框的“概述”页中, 单击“下一步”。

6.在“Win32 应用程序向导”中的“应用程序设置”页中,选择“应用程序类型”下的“DLL”(如果 可用),或者选择“控制台应用程序”(如果“DLL”不可用)。某些版本的Visual Studio 不支持通过使用向导创建DLL 项目。您可以稍后对此进行更改,以将项目编译为DLL。 7.在“Win32 应用程序向导”的“应用程序设置”页中,选择“附加选项”下的“空项目”。 8.单击“完成”创建项目。 向动态链接库添加类 1.若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。将显示“添加新项”对话框。 在“类别”窗格中,选择“Visual C++”下的“代码”。在“模板”窗格中选择“头文件(.h)”。为 头文件选择一个名称,如MathFuncsDll.h,并单击“添加”。将显示一个空白文件。 2.添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。代 码应与以下内容类似: 复制 // MathFuncsDll.h namespace MathFuncs { class MyMathFuncs { public: // Returns a + b static __declspec(dllexport) double Add(double a, double b); // Returns a - b static __declspec(dllexport) double Subtract(double a, dou ble b); // Returns a * b static __declspec(dllexport) double Multiply(double a, dou ble b); // Returns a / b // Throws DivideByZeroException if b is 0 static __declspec(dllexport) double Divide(double a, doubl e b); }; } 3.请注意此代码方法声明中的__declspec(dllexport)修饰符。这些修饰符使DLL 能够导出 该方法以供其他应用程序使用。有关更多信息,请参见dllexport, dllimport。

weblogic在windows下安装及部署项目教程

Weblogic在windows下安装及部署项目教程 1.Weblogic10.3.6版本下载地址: https://www.doczj.com/doc/dd10268563.html,/technetwork/cn/middleware/ias/downloads/wls-main-091116-zhs.html 或在\\192.168.60.244\Tool\测试环境工具上取 2.安装 1)安装目录:D:\Oracle\Middleware 2)选择安装类型为自定义,选择自己需要安装的组件,其他都是默认直接下一步,直 到安装完成。 3.创建域 1)创建新的weblogic域 2)其他默认,点“下一步”,到下图这个界面设置用户名和密码。例如:用户名:weblogic 密码:weblogic1

3)选择服务器启动模式和JDK 4)选择可选配置

5)配置管理服务器 6)后面步骤直接“下一步”,知道创建完成。创建完成,运行 D:\oracle\Middleware\user_projects\domains\easyStore_domain\bin\startWeblogic.c md,用浏览器打开http://192.168.60.244:7001/console可直接登录管理服务器。 4.配置受管服务器 1)登录界面,使用自己设置的用户名密码登录

2)新建受管服务器 3)设置服务器名称、服务器监听地址、服务器端口,名称和端口均不与其他服务器重 复。然后点击“下一步”,完成。

5.配置数据源 1)点击“新建”,选择“一般数据源” 2)设置JDBC数据源名称,以及数据库类型,点击“下一步” 3)设置数据库驱动程序,选择如下图所示 4)设置JDBC数据源详细信息,实际的数据库名称、数据库用户名、主机地址等。

Windows 2003下CACTI的安装及配置

前期准备: 平台:Windows2003 需要安装的软件: Apache2.0.63 https://www.doczj.com/doc/dd10268563.html,/ PHP5.2.2 https://www.doczj.com/doc/dd10268563.html,/downloads.php MySQL5.1.50 https://www.doczj.com/doc/dd10268563.html,/downloads/mysql/ cacti-0.8.7g https://www.doczj.com/doc/dd10268563.html,/download_cacti.php cygwin 1.7.6-1https://www.doczj.com/doc/dd10268563.html,/需在线安装 rrdtool-1.2.15 https://www.doczj.com/doc/dd10268563.html,/downloads/ Spine(Cactid)0.8.7 https://www.doczj.com/doc/dd10268563.html,/downloads/ net-snmp-5.5 https://www.doczj.com/doc/dd10268563.html,/download.html 1,安装Apache 按提示默认安装即可。 注意:如果有80端口或是8080端口已经占用,请更改Apache安装文件目录conf文件夹的httpd.conf里,listen的端口为808X: # # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses (0.0.0.0) # #Listen 12.34.56.78:80 Listen 8083 我的80端口和8081端口已被占用,所以Apache的测试页为:http://localhost:8083

VC++ 2017 动态链接库的创建和使用总结

Visual studio c++ 2017 动态链接库的创建和使用总结 一动态链接库的创建两种方式: 1、只有从文件->新建->项目->Windows桌面-> Windows桌面向导->选择“动态链接 库(.dll)->生成解决方案,才会生成.dll和.lib文件。 (1)在头文件声明中(注意要在头文件变量和函数声明中,而不是在变量和函数的定义中声明),不加extern “C”修饰,编译成DLL后,用depends.exe查看导出函数名。 可以看出,导出的函数名都被编译器篡改了。

(2)在头文件声明中,变量和函数名前加extern “C”修饰后,编译成DLL后,再用depends.exe查看导出函数名。 可以看出,用extern “C”修饰的函数名,编译后函数名保持不变。类及成员函数不能用extern “C”修饰,编译成DLL后,成员函数名发生了改变。 2、如果从文件->新建->项目->动态链接库(DLL)->生成解决方案,就只生成.dll,不生成.lib。

二动态链接库的调用两种方式: 1、显式调用 (1)使用显式调用的前提:创建的DLL,编译时不要篡改函数名称,定义函数名时,可用extern “C”修饰函数名,保证编译时,函数名不被篡改。否则GetProcAddress( )不能正确地获取dll中的函数名。 但是导出的类不能使用extern “C”修饰。 (2)使用显式调用的优点:不用动态链接库的.h和.lib文件,只要有.dll文件就可调用库函数,使用LoadLibrary(),在需要调用.dll中的库函数时,才动态加载到内存中,使用完毕后,可以用FreeLibrary()释放内存中的dll;使用GetProcAddress( )获取dll中的函数名。必须事先知道dll中的函数名和形式参数。 (3)使用显式调用缺点:调用每个函数时,都必须使用 GetProcAddress( )获取dll中的函数名,并转换成原来的函数,比较麻烦。而隐式调用DLL函数,由于使用了DLL的头文件.h,使用起来非常方便。 2、隐式调用 (1)隐式调用DLL函数缺点: 应用程序加载时,在内存中载入DLL动用库中的函数、变量、或类。使用完毕后,DLL 也不会从内存中释放。 .lib包含了库函数的入口,但不包含函数代码,应用程序调用时,才从dll中载入。(2)隐式调用DLL函数优点: 应用程序调用dll时,需要.lib和.h文件,在应用程序.exe文件夹debug或者release 中有DLL文件,即.h、.lib和.dll三个文件,在应用程序中直接使用DLL中的类和函数,可以不考虑编译DLL函数和变量名发生改变的问题。不需要像显式调用那样,函数需要 用 GetProcAddress( )一一获取。 隐式调用DLL中的变量、函数和类,有两种方法: (1)在主程序中包含DLL的头文件dll.h,在main( )前加上#pragma comment(lib,”dll.lib”),没有分号,再在debug或release中复制DLL.dll。 (2)在主程序中包含DLL的头文件dll.h,在项目属性->链接器->添加依赖项中加上“dll.lib;“,再在debug或release中复制DLL.dll,即可。

(动态链接库)DLL编写与使用方法

DLL的创建与调用 1、DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。 静态链接库与动态链接库的区别: (1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE 文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。 (2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 动态链接库的分类:Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。非MFC动态库不采用MFC 类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。 2、创建一个DLL 2.1 非MFC的DLL 2.1.1声明导出函数: extern “C” __declspec(dllexport) int add(int a, int b); 其中extern “C”为声明为C编译。由于C++编译器在编译的时候会造成其函数名的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。这样如果用C编译的程序来调用该dll中的函数时,可能会造成找不到该函数。 __declspec(dllexport)表示该函数为DLL输出函数,即其他应用程序可以调用该函数 从dll中声明输出函数有两种方式: (1)另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。 (2)用__declspec(dllexport)来声明函数 如果使用Visual C++来创建dll,对于同样用VC创建的exe来说,调用dll没有什么问题。而如果用其他工具来创建的exe来调用dll,就会出现问题。因为即使你不用C++编译器,Microsoft C编译器也会损害C函数。当用__stdcall将函数输出时,C编译器会将函数改为_func@1的形式。在这里需要在.def 文件中加入EXPORTS节来输出函数: EXPORTS func 这样,dll将用func函数名来输出函数。 另一种方式是用#pragma (linker, “/exports:func=_func@1”),告诉编译器输出函数func,这种方式没有前一种好。 如果通过VC++编写的DLL欲被其他语言编写的程序调用,应将函数的调用方式声明为__stdcall方式,WINAPI都采用这种方式,而C/C++ 缺省的调用方式却为__cdecl。__stdcall方式与__cdecl对函数名最终生成符号的方式不同。若采用C编译方式(在C++中需将函数声明为extern "C"),__stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functionname@number;

在windows系统下安装PANDA全过程

在windows系统下安装PANDA的详细全步骤 1、在windows系统下安装虚拟机(Linux) 安装一个虚拟机.下载一个VMWare Player并安装 2、在Linux虚拟机中安装FSL (1)在FSL官网中,下载的FSLvm,MD5summer, fsl-5.0.8-centos6_64.tar.gz(如果是为 了使用PANDA下载fsl,我们建议使用fsl网站上前面两个Centos版本,这个版本在ubuntu下也是可以的,不要使用Debian/Ubuntu版本,使用这个版本是用不了PANDA的) 将下载的FSLvm,MD5summer并解压 运行MD5summer,选择FSLVm6_64文件夹,点击Create sums. 选择FSLVm6_64文件夹,点击Create sums.

Select All -> Add -> OK. 形成一个FSLVm6_64.md5文件 运行VMWare Player -> Open a Virtual Machine.

选择FSLVm6_64,然后Play.第一次运行的时候会问if the VM was moved or copied,选择I copied it.然后可能要更新. 如果没有自动跳出FSLVM6_64,则选择打开虚拟机,选择刚才生成好的 登陆,密码是fsluser.

(2)进入linux的界面中, 1)将fsl-5.0.8-centos6_64.tar.gz拷贝到/home/fsl下,打开一个终端(Ctrl + Alt + T)2)进入/home/fsl目录下 cd /home/fsl 3)解压压缩包 tarzxvffsl-5.0.8-centos6_64.tar.gz 4)切换到root用户下 su输入密码fslroot 5) 将fsl的环境变量写到系统文件中(只需将下面命令拷贝到终端执行) echo "FSLDIR=/home/fsl/fsl" >> /etc/profile echo ". \${FSLDIR}/etc/fslconf/fsl.sh" >> /etc/profile

vs2012建立和引用lib、dll简明教程

Vs2012建立引用lib、dll简明教程 一、基本概念 Lib——静态链接库用到的指令都被直接包含在exe文件中,程序运行的时候不再需要其它的库文件。静态共享代码 DLL——把调用的函数所在dll和函数所在位置信息链接至程序中,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。动态引用和卸载 二、vs2012建立和引用lib 建立lib 1.创建静态项选择win32控制台应用程序->输入项目名称->选择静态链接库->取消 默认预编译头->完毕。 2.编写库创建cpp和h文件,并编写内容。 3.编译,创建完成,新lib在输出路径(debug)中。 引用lib 1.创建工程略 2.编写程序略 3.在项目->属性->配置属性->vc++目录->包含目标中附加之前工程的头文件的目录 4.在引用->通用属性->框架和引用->添加引用->勾选相应目录->确定(lib项目和该项目在同一路径下时)。 或者在vc++目录->库目录中添加新lib的路径,在链接器->输入->附加依赖项中添加新lib。 5.完成。在编写程序时要加上头文件包含。 三、vs2012建立和引用dll 建立dll 1. 创建动态项选择win32控制台应用程序->输入项目名称->选择动态链接库->取消默认预编译头->完毕。

2. 编写库创建cpp和h文件,并编写内容。在h文件中对函数的声明时注意,对于该dll输出接口的函数要用__declspec(dllexport)声明,如 extern “C”__declspec(dllexport) int Add(int &a,int &b); 加extern“C”是为了解决因C编译器与C++编译器对函数声明的编译情况不同(c语言不支持重载),而导致的调用错误。如果已知在c++环境下调用,可不必加。 3. 引用dll同时需要lib文件,再在项目中添加一个def文件。 4. 编译生成,新dll和lib在输出路径(debug)中。 此处的lib存放的是dll的函数入口位置,与单纯静态链接库 lib不同。 引用dll 1.创建工程略 2.编写程序略 3.在项目->属性->配置属性->vc++目录->包含目标中附加dll的头文件的目录 4.在引用->通用属性->框架和引用->添加引用->勾选相应目录->确定(dll项目和该项目在同一路径下时) 或者在vc++目录->库目录中添加新lib的路径,在链接器->输入->附加依赖项中添加新lib。 5.完成。在编写程序时要加上头文件包含。

Nessus在windows下地安装与使用

Nessus的安装和使用 1Nessus的简介 Nessus被认为是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用 Nessus 作为扫描该机构电脑系统的软件。 1998年, Nessus 的创办人 Renaud Deraison 展开了一项名为 "Nessus"的计划,其计划目的是希望能为因特网社群提供一个免费、威力强大、更新频繁并简易使用的远端系统安全扫瞄程序。经过了数年的发展, 包括 CERT 与 SANS 等著名的网络安全相关机构皆认同此工具软件的功能与可用性。 2002年时, Renaud 与Ron Gula, Jack Huffard 创办了一个名为Tenable Network Security 的机构。在第三版的Nessus 发布之时, 该机构收回了 Nessus 的版权与程序源代码(原本为开放源代码), 并注册了 https://www.doczj.com/doc/dd10268563.html, 成为该机构的网站。目前此机构位于美国马里兰州的哥伦比亚。 2Nessus的特色 ●提供完整的电脑漏洞扫描服务, 并随时更新其漏洞数据库。 ●不同于传统的漏洞扫描软件, Nessus 可同时在本机或远端上摇控, 进行系 统的漏洞分析扫描。 ●其运作效能能随着系统的资源而自行调整。如果将主机加入更多的资源(例如 加快CPU速度或增加内存大小),其效率表现可因为丰富资源而提高。 ●可自行定义插件(Plug-in) ●NASL(Nessus Attack Scripting Language) 是由 Tenable 所开发出的语言, 用来写入Nessus的安全测试选项。 ●完整支持SSL (Secure Socket Layer)。 ●自从1998年开发至今已谕十年, 故为一架构成熟的软件。 3Nessus的安装和注册 3.1 安装 首先,要安装Nessus必须确认你所安装的硬盘的分区格式是NTFS,如果是FAT32,安装完成后客户端无法登陆。要在Windows上安装nessus,需要到Nessus的官方网站上下载Windows版本的Nessus,下载地址:https://www.doczj.com/doc/dd10268563.html,/nessus/。在首页上选择Download选项,然后在页面上会出现各种版本的nessus,有Windows,FreeBSD,Linux和Mac OS X操作系统等版本,我们选择的是Windows版本,之后会出现两中类型的nessus,64bit和32bit,请按你CPU的类型选择。目前的nessus版本是Nessus 4.2.2。

dll(动态链接库)的创建和使用

dll的创建和使用使用C++语言创建dll并使用该dll的演示、说明

Dll的创建和使用 第一部分创建C风格的dll (4) 步骤1:创建dll工程 (4) 步骤2:文件改名 (5) 步骤3:拷贝文件内容 (6) 步骤4:从工程中删掉文件main.cpp,main.h (7) 步骤5:继续修改文件mydll.h和mydll.cpp (7) 步骤6:编译并生成dll文件 (8) 第二部分以间接调用的方式使用.dll (10) 步骤1:新建一个控制台工程(UseDll.cbp). (10) 步骤2:修改main.cpp。 (11) 步骤3:编译,生成UseDll.exe (12) 步骤4:拷贝mydll.dll到UseDll.exe所在目录 (13) 步骤5:执行UseDll.exe,输出: (13) 间接调用Dll的好处 (14) 第三部分以直接调用的方式使用.dll (15) 步骤1:改写main.cpp (15) 步骤2:添加mydll.dll的静态导出库到UseDll工程中 (16) 步骤3:编译并执行,输出 (17) 直接调用的好处 (18) Dll的优势 (18) 调用约定的说明 (18) 第四部分创建C++风格的dll(本地方法) (19) 步骤1:在mydll.h中新增导出的类 (19) 步骤2:在mydll.cpp中实现Cat类 (19) 步骤3:编译MyDll,生成mydll.dll,mydll.a (21) 第五部分使用本地风格的C++ DLL (22) 步骤1:修改UseDll中的main.cpp (22) 步骤2:将mydll.a添加到UseDll工程的BuildOptions中 (23) 步骤3:编译UseDll工程,生成UseDll.exe (23) 步骤4:将MyDll.dll拷贝到UseDll.exe目录下 (23) 步骤5:执行UseDll.exe,输出 (23) 本地风格的不足 (24) 第六部分创建推荐风格的C++ DLL (26) 步骤1:修改mydll.h,创建Cat的接口类ICat (26) 步骤2:新建类Cat (27) 步骤3:实现createCat函数 (29) 步骤4:编译,生成mydll.dll (31) 第七部分使用推荐风格的C++ DLL (32) 步骤1:修改UseDll中的main.cpp (32)

Cacti-0.8.8b详细安装及配置步骤

1.Cacti环境安装 1.1安装LAMP环境 安装LAMP环境,当然,如果你有兴趣可以采用编译,我线上Mysql是编译的,其余是yum安装的。在这次实验采用yum安装。 关闭iptables与selinux,如果有需要,后面再开启。配置好yum源,开始安装。 yum -y install httpd http-devel httpd-manual mysql mysql-devel mysql-server php php-devel php-mysql php-common php-pdo php-gd lm_sensors net-snmp php-snmp net-snmp-utils chkconfig mysqld on chkconfig httpd on chkconfig snmpd on service mysqld start service httpd start service snmpd start 在浏览器中输入http://serverip,查看测试页有没有出现。 1.2配置snmp vim /etc/snmp/snmd.conf

#/etc/init.d/snmpd restart 验证snmp配置是否正确, # snmpwalk -v 2c -c public 127.0.0.1 if 表示正确 IF-MIB::ifIndex.1 = INTEGER: 1 IF-MIB::ifIndex.2 = INTEGER: 2 IF-MIB::ifDescr.1 = STRING: lo 如果提示Timeout: No Response from 127.0.0.1则配置不对。 1.3创建数据库存储cacti的数据

相关主题
文本预览
相关文档 最新文档