鱼C论坛

 找回密码
 立即注册
查看: 1639|回复: 3

[技术交流] 用VC++6 编写静态链接库和调用静态链接库源码及下载

[复制链接]
发表于 2022-4-22 01:01:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
通过本贴的例子,你能学到:1.编译静态链接库 2.调用静态链接库 3.头文件的编写 4.函数中的变量作用域 5.指针的应用和理解
一。静态链接库代码:
jlj.cpp
#include "jlj.h"
#include "stdlib.h"

//char * temp;//定义声明全局字符指针变量
int  stringlen(char const * str) //加上const,表示函数不会修改传入的字符数组
{
        int i=0;//i要在for语句外部定义,否则后面的return中的i会是没有定义,这里需要注意变量的作用域
        for( ;*str!='\0';i++,str++);//用指针自加比用下标运算符快,
        return i;
}

char *  stringupr(char const * str)
{
        int i;
        char * strcpy, * temp;
        strcpy=temp=(char *)malloc(100*sizeof(char)); //在动态内存去开辟内存块,其实最好使用完用free函数回收
        for(i=0;*str!='\0';i++,strcpy++,str++)
                if(*str>='a'&&*str<='z')
                        *strcpy=*str-0x20;
                else
                        *strcpy=*str; 
        *strcpy='\0';//标志字符串结束
                return temp;
}

char  *  stringlwr(char const * str)
{
        int i;
        char * strcpy,* temp;
        strcpy=temp=(char *)malloc(100*sizeof(char)); 
        for(i=0;*str!='\0';i++,strcpy++,str++)
                if(*str>='A'&&*str<='Z')
                        *strcpy=*str+0x20;
                else
                        *strcpy=*str; 
        *strcpy='\0';
                return temp;
}

int  stringcmp(char const * str1,char const * str2)
{
        int i,len,lens;
        if((len=stringlen(str1))<(lens=stringlen(str2)))
                len=lens;
        for(i=0;i<len;i++,str1++,str2++)
                if(*str1==*str2)
                        ;//这里可不要加return 0,因为函数结束需要加return语句
                else if(*str1>*str2)
                        return 1;
                else
                        return -1;
                return 0;
}

jlj.h
#ifndef LIB_H
#define LIB_H

extern "C"  int stringlen(char const * str);
extern "C"  char * stringupr(char const * str);
extern "C"  char * stringlwr(char const * str);
extern "C"  int stringcmp(char const * str1,char const * str2);

#endif

二。调用静态链接库代码:
str.cpp
//
//编写一个求字符串长度的函数stringlen、字符串大小写转换函数stringupr、stringlwr及字符串比较函数stringcmp,
//并在main函数中调用并输出结果。编写的包含main函数的源程序以str.cpp命名,stringlen,stringupr,stringlwr
//,stringcmp函数在jlj.lib中实现
//
//////////////////////////////////////////////////////////////////////////

#include "str.h"

int main()
{
    char str1[100],str2[100];
        printf("请输入第一个字符串str1:\n");
        scanf("%s",str1);
#if (DEBUG==1)
        str1[0]=0;
#endif
        printf("请输入第二个字符串str2:\n");
        scanf("%s",str2);
        printf("***************************************\n");
        printf("第一个字符串str1长度为:%d\n",stringlen(str1));
        printf("第二个字符串str2长度为:%d\n",stringlen(str2));
        printf("***************************************\n");
    if(stringcmp(str1,str2)==0)
                printf("字符串str1和字符串str2相同\n");
        else
                printf("字符串str1和字符串str2不同\n");
        printf("***************************************\n");
        printf("第一个字符串str1转化大写为:\n");
        printf("%s\n",stringupr(str1));
        printf("***************************************\n");
        printf("第二个字符串str2转化小写为:\n");
        printf("%s\n",stringlwr(str2));
        printf("***************************************\n");
        system("pause");
        return 0;
}

str.h
#ifndef _SOMEFILE_H_
#define _SOMEFILE_H_
#define DEBUG 0//当DEBUG为1时为测试模式
#include <stdio.h>
#include <stdlib.h>
#include "jlj.h"
#pragma comment( lib, "jlj.lib" ) //指定与静态库一起连接
#endif
源码下载地址
游客,如果您要查看本帖隐藏内容请回复

stringlib.rar

216.44 KB, 下载次数: 5

静态链接库源码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-22 17:04:10 | 显示全部楼层
建立静态链接库时,需按下图:
static.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-22 17:21:27 | 显示全部楼层
静态链接库代码如下图
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-22 17:26:55 | 显示全部楼层
调用示例源码如下图
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 20:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表