使用CodeBlocks创建和使用C语言动态链接库

codeblocks中创建和调用静态链接库请参考:http://blog.csdn.net/kld1412/article/details/51628197

一、创建C语言动态链接库

1.建立。

File->New->Projects->Dynamic Link library->Go
给项目命名为:Dynamic_library
删除项目中的main.cpp和main.h重新添加一个simple.c和simple.h
修改simple.h中的代码为:

#ifndef SIMPLE_H_INCLUDED
#define SIMPLE_H_INCLUDED

#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif // __cplusplus

#include <windows.h>

EXPORT  int pow2(int a);
EXPORT  void upstr(char *str, char *s);

#endif // SIMPLE_H_INCLUDED

修改simple.c中的代码为:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "simple.h"

int pow2(int a)
{
    return a*a;
}

void upstr(char *str, char *s)
{
    int i;
    for(i = 0; i < strlen(str); i++)
    {
        if(str[i] >= 'a' && str[i] <= 'z')
            s[i] = str[i] - 'a' + 'A';
        else
            s[i] = str[i];
    }
    s[i] = '\0';

}
2.编译(Build)。

编译完成后找到该project的的目录文件,打开Dynamic library/bin/Debug 这时可以看到生成的libDynamic library.a 、 Dynamic library.dll 、libDynamic library.def文件。

二、调用动态链接库

1.创建Console application项目

File->New->Projects->Console application -> …,->finish
给项目命名为:dllTest

在工程中添加“simple.h”,并把上面simple.h中的代码复制到现在这个simple.h中。

修改main.c:

#include <stdio.h>
#include <stdlib.h>
#include "simple.h"

int main()
{
    printf("Dynamic Link Library test!\n");
    int t,x;
    char* str = "Dynamic library _win32";
    char* s = (char*)malloc(100);

    x=6;
    t = pow2(x);
    upstr(str,s);

    printf("x after powered is : %d\n",t);
    printf("str after up is :%s",s);

	free(s);
    return 0;
}

}
2. 添加libDynamic library.a库文件

通常, Codeblocks并不知道库文件被使用和它的位置,我们必须声明库文件,让它在链接的时候不会出错。

选择菜单Project-> Build Options… ->Linker settings->Add 添加libDynamic library.a库文件。
在这里插入图片描述
除此之外,还需要把编译生成的Dynamic library.dll文件复制到该project的Bin/Debug目录下,(即复制到:Dynamic library/bin/Debug目录下)。

3.3.编译运行

添加完成后就可以编译运行了,运行结果如下:
在这里插入图片描述

注意:dll与lib的调用有一些差异。对于dll的调用,一定要注意满足:
在测试程序的工程中要加入DLL输入库。(即.a库文件)
在测试程序中包含DLL头文件。(#include “.h”)
在适当的目录中放置DLL库。(博客中放置在与工程的.exe文件同目录下)

后记

dll调用:
(1)一般动态链接库有头文件声明h文件,lib,dll;这三个文件都用;使用的时候需要引用的文件中加上#pragma comment (lib, “xxx.lib”)就可以,然后可以调用dll里面函数等
(2)如果只有lib,h文件,那这是静态链接库,同上面一样
(3)如果只有dll,只能借用vc中的LoadLibrary以及GetProcAddress两个api,前提是你得知道dll中函数的形式

(1)编写程序时,你要包含(#include “什么.h”) dll文件作者提供 的 头文件(.h文件) 。
程序里,便和普通函数调用一样,去调用它的函数。
(2)程序编译时,你要链接 dll文件作者提供 的 (.lib文件) 库文件。
当然,你可以在源程序里把.lib 名字 写上,编译时自动去链接,例子:
#pragma comment (lib, “什么.lib”)
(3)执行时,要有 .dll 文件. 放在当前文件夹或系统文件夹里。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子开发攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值