window 静态库的创建和使用

VC6.0做法:

File--新建---工程--win32 static-library   输入工程名和位置,即可进入静态库界面。

以16进制转10进制为例

建立C程序或C++库文件。对于库文件最好用C写,可移植性更强。

#include<stdio.h>
#include<string.h>
#include<math.h>
/*计算字符串是否有四个字节*/
int GetLeghtofHEX(char *p)
{
    int count=0;
	char *temp =p;
	while(*temp++!='\0')
		count++;
	return count ;
}
/*如果不足四个字节,前4-count位填0*/
char *modifbit(char *p)
{   
	char tab[5];
	int i=0,j=0;
	char * temp;
	int count=GetLeghtofHEX(p);
    if (count!=4)
	{
		for(i=0;i<4-count;i++)
			tab[i]='0';
		while(i<4)
		{
			tab[i]=*(p+j);
			j++;
			i++;
		}
		tab[i]='\0';
		temp = tab;
		
	}
	else
		temp=p;
    return temp;
}

int Hexstoinit(char *p)
{
    int i,j=0;
    char string[5]="0000";
	int Dec=0,temp;
	char *tempoint=p;
	char *temp2;
	if(strstr(p,"0x"))
	{
		tempoint=strstr(p,"0x")+2;
	}
    printf("string=%s\n",tempoint);
	temp2=modifbit(tempoint);
	//printf("count=%s\n",temp2);
	tempoint=temp2;
    for(i=3;i>=0;i--)
	{
		string[j++]=*(tempoint+i);
	}
	string[4]='\0' ;
	
	printf("string1=%s\n",string);
	for(j=0;j<4;j++)
	{
		if(string[j]<='9')
		{
			temp=string[j]-'0';
		}
		else if(string[j]=='a'||string[j]=='A')
			temp=10;
		else if(string[j]=='b'||string[j]=='B')
			temp=11;
		else if(string[j]=='c'||string[j]=='C')
			temp=12;
		else if(string[j]=='d'||string[j]=='D')
			temp=13;
		else if(string[j]=='e'||string[j]=='E')
			temp=14;
		else if(string[j]=='f'||string[j]=='F')
			temp=15;
		
		Dec+=temp*pow(16,j);
	}
	printf("string=%d\n",Dec);
	return Dec;
}


并将C实现添加到工程。建立头文件,并添加到工程

#ifndef  __HEXTOINT_H
#define  __HEXTOINT_H
int GetLeghtofHEX(char *p);
char *modifbit(char *p);
int Hexstoinit(char *p);
#endif

头文件就是对外的接口,提供给对外使用的手册

编译后,在Debug目录下就产生了Hextoint.lib静态库。



静态库使用方法:

文件---新建---win32 application

创建C应用代码,并添加到头文件

#include<StdAfx.h>
#include "Hextoint.h"
#pragma comment(lib, "Hextoint.lib") //程序里面声明静态库的路径和位置。静态库放在当前目录下,否则放在其他目录下,就要使用文件路径+文件名
#include<stdio.h>
int main(int argc, char* argv[])
{
   printf("The Hextoint is %d",Hexstoinit("0xFF"));
	return 0;
}
将头文件,放在当前目录下,并添加到工程

#ifndef  __HEXTOINT_H
#define  __HEXTOINT_H
int GetLeghtofHEX(char *p);
char *modifbit(char *p);
int Hexstoinit(char *p);
#endif

VC2008  做法类似

创建一个静态库

文件--新建---工程---win32 project---根据向导选择win32 static library

然后project--add new item 添加头文件和C文件

编译后,在Debug目录下就产生了Hextoint.lib静态库。


使用静态库

文件--新建---工程---win32 project---根据向导选择win32 application

然后project--add new item 添加头文件和C文件

编译后,链接,执行即可

// Clibtest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "..\Hextoint.h"
#include <stdio.h>
#pragma comment(lib, "..\\Clibstatic.lib")  /*库的路径必需使用\\而不是\\*/

int _tmain(int argc, _TCHAR* argv[])
{
	
	printf("hello,This is %d\n",Hexstoinit("0xff"));
	return 0;
}
 


#ifndef  __HEXTOINT_H
#define  __HEXTOINT_H
int GetLeghtofHEX(char *p);
char *modifbit(char *p);
int Hexstoinit(char *p);
#endif


在程序里面进行库链接只是其中方法之一,也可以修改编译器中库引用路径进行链接,为了方便,通常还是使用
#pragma comment(lib, "..\\Clibstatic.lib") 
来引用库。

通常我们用C来做库,当然,也可以用C++做库

以C++建立库为例子

文件--新建---工程---win32 project---根据向导选择win32 static library

然后project--add class 和 add new item添加C++文件和头文件


#include "StdAfx.h"
#include "Hextoint.h"
#include<stdio.h>
#include<string.h>
#include<math.h>
Hextoint::Hextoint(void)
{
}

Hextoint::~Hextoint(void)
{
}
int  Hextoint:: GetLeghtofHEX(char *p)
{
	int count=0;
	char *temp =p;
	while(*temp++!='\0')
		count++;
	return count ;
}
char * Hextoint::modifbit(char *p)
{   
	char tab[5];
	int i=0,j=0;
	char * temp;
	int count=GetLeghtofHEX(p);
	if (count!=4)
	{
		for(i=0;i<4-count;i++)
			tab[i]='0';
		while(i<4)
		{
			tab[i]=*(p+j);
			j++;
			i++;
		}
		tab[i]='\0';
		temp = tab;

	}
	else
		temp=p;
	return temp;
}

int Hextoint::Hexstoinit(char *p)
{
	int i,j=0;
	char string[5]="0000";
	float Dec=0,temp;
	char *tempoint=p;
	char *temp2;
	if(strstr(p,"0x"))
	{
		tempoint=strstr(p,"0x")+2;
	}
	printf("string=%s\n",tempoint);
	temp2=modifbit(tempoint);
	//printf("count=%s\n",temp2);
	tempoint=temp2;
	for(i=3;i>=0;i--)
	{
		string[j++]=*(tempoint+i);
	}
	string[4]='\0' ;

	printf("string1=%s\n",string);
	for(j=0;j<4;j++)
	{
		if(string[j]<='9')
		{
			temp=string[j]-'0';
		}
		else if(string[j]=='a'||string[j]=='A')
			temp=10;
		else if(string[j]=='b'||string[j]=='B')
			temp=11;
		else if(string[j]=='c'||string[j]=='C')
			temp=12;
		else if(string[j]=='d'||string[j]=='D')
			temp=13;
		else if(string[j]=='e'||string[j]=='E')
			temp=14;
		else if(string[j]=='f'||string[j]=='F')
			temp=15;

		Dec += temp*pow(16.0,j);
	}
	printf("string=%d\n",Dec);
	return Dec;
}

#pragma once

class Hextoint
{
public:
	Hextoint(void);
	~Hextoint(void);
	int  GetLeghtofHEX(char *p);
	char * modifbit(char *p);
	int Hexstoinit(char *p);
};


这样在Debug 目录下就会生成: .lib静态库文件


使用库方法:

文件--新建---工程---win32 project---根据向导选择win32 application

然后project--add new item 添加头文件和C文件

// testllib.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Hextoint.h"
#pragma comment(lib, "staticlib.lib")  //lib库放在工程的当前目录下
int _tmain(int argc, _TCHAR* argv[])
{
    Hextoint a;
	printf("The Hextoint is %d",a.Hexstoinit("0xFF"));
	return 0;
}


注意:静态库引用,就是在编译将静态库放在工程目录下,和APP,直接编译成一个.exe, 所以这个.exe 是包括APP+lib,很大的镜像,直接执行就可以了,便于程序发布。



如果不用#pragma comment指定,则可以直接在VC++中设置,如图2,依次选择tools、options、directories、library files菜单或选项,填入库文件路径。图2中加红圈的部分为我们添加的libTest.lib文件的路径。


猜你喜欢

转载自blog.csdn.net/fengliang191/article/details/39610793