jhanker 发表于 2022-4-22 01:01:38

用VC++6 编写静态链接库和调用静态链接库源码及下载

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

//char * temp;//定义声明全局字符指针变量
intstringlen(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;
}

intstringcmp(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,str2;
        printf("请输入第一个字符串str1:\n");
        scanf("%s",str1);
#if (DEBUG==1)
        str1=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
源码下载地址**** Hidden Message *****

jhanker 发表于 2022-4-22 17:04:10

建立静态链接库时,需按下图:

jhanker 发表于 2022-4-22 17:21:27

静态链接库代码如下图

jhanker 发表于 2022-4-22 17:26:55

调用示例源码如下图
页: [1]
查看完整版本: 用VC++6 编写静态链接库和调用静态链接库源码及下载