探索C语言 、cpp 建立动态链接库的步骤。
无原理,看步骤。
1 建立“测试系统”工程
1.1 在DynamicLinkLibrary 工程中添加testdll.cpp
1.2 配置库目录
$(SolutionDir)$(Configuration)\
2 建立cdll 工程
2.1 添加cdll.h 文件
#ifdef DLLCDLL
#else
#define DLLCDLL __declspec(dllimport)
#endif
#ifndef __CDLL_H__
#define __CDLL_H__
#ifdef __cplusplus
extern "C"{
#endif
DLLCDLL int add(int x, int y);
#ifdef __cplusplus
}
#endif
#endif
2.2 添加cdll.cpp 文件
#define DLLCDLL __declspec(dllexport)
#include"cdll.h"
int add(int x, int y)
{
return x + y;
}
2.3 编译cdll 工程
2.4 测试cdll
编辑testdll.cpp 添加
#include"../cdll/cdll.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma comment(lib,"cdll.lib")
void testcdll()
{
int res = 0;
res = add(10, 11);
printf("%d\n", res);
system("pause");
}
void main()
{
testcdll();
}
运行程序
3 建立cppdll 工程
3.1 添加Person 类
Person.h
#ifdef DLLCDLL
#else
#define DLLCDLL __declspec(dllimport)
#endif
#pragma once
class DLLCDLL Person
{
public:
Person();
Person(const char *name, int age);
void sayhello();
~Person();
private:
char name[32];
int age;
};
Person.cpp
#define DLLCDLL __declspec(dllexport)
#include "Person.h"
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
Person::Person()
{
}
Person::Person(const char *name, int age)
{
strcpy(this->name, name);
this->age = age;
}
Person::~Person()
{
}
void Person::sayhello()
{
printf(" name: %s,age: %d\n", this->name, this->age);
}
3.2 编译
3.3 测试cppdll
编辑testdll.cpp
#include"../cdll/cdll.h"
#include"../cppdll/Person.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma comment(lib,"cdll.lib")
#pragma comment(lib,"cppdll.lib")
void testcdll()
{
int res = 0;
res = add(10, 11);
printf("%d\n", res);
system("pause");
}
void testcppdll()
{
Person p = { "zz", 25 };
p.sayhello();
system("pause");
}
void main()
{
//testcdll();
testcppdll();
}