标签:需要 clu 头文件 spl out 导入 定义宏 port 执行
一个简单的动态链接库的生成和调用例子,太过简单,大神请绕道。
使用vs创建工程选择动态链接库。
在项目中创建源文件和头文件,并在文件中添加以下代码。
在头文件中添加以下代码
// dlltest.h 头文件,使用动态链接库时需要包含头文件
#pragma once
#ifdef __DLLEXPORT
#define __DLL_EXP _declspec(dllexport) // 导出函数 - 生成dll文件时使用
#else
#define __DLL_EXP _declspec(dllimport) // 导入函数 -使用dll是使用
#endif // __DLLEXPORT
// 判断是否是c++
#if defined(__cplusplus)||defined(c_plusplus)
extern "C"
{
#endif
__DLL_EXP int add(int a, int b);
__DLL_EXP int sub(int a, int b);
#if defined(__cplusplus)||defined(c_plusplus)
}
#endif
在源文件文件中添加以下代码
// dlltest.cpp
#include<stdio.h>
#include"dlltest.h"
#include"pch.h"
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
在工程属性,C/C++ => 预处理器 => 预处理定义
中添加预定义宏__DLLEXPORT
.
在工程属性,C/C++ => 预编译头 => 预处编译头
选择不使用预编译头。
编译生成dll文件和lib文件(如果没有生成lib文件,需要在工程中添加一个Source.def文件,内容为LIBRARY)。
新建一个c++工程,包含dlltest.h
头文件,并引用生成的lib文件。
添加源文件testcpp.cpp
,在源文件中输入以下代码:
#include <iostream>
#include"dlltest.h"
int main()
{
printf("test cpp\n");
std::cout << "Hello World!\n";
printf("3+2 = %d\n", add(3, 2));
printf("3-2 = %d\n", sub(3, 2));
}
编译,运行即可调用上面生成的动态链接库。
新建一个c语言工程,包含dlltest.h
头文件,并引用生成的lib文件。
添加源文件testc.c
,在源文件中输入以下代码:
// testc.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <stdio.h>
#include "dlltest.h"
int main()
{
printf("test c\n");
printf("3+2 = %d\n", add(3, 2));
printf("3-2 = %d\n", sub(3, 2));
}
编译,运行即可调用上面生成的动态链接库。
标签:需要 clu 头文件 spl out 导入 定义宏 port 执行
原文地址:https://www.cnblogs.com/ay-a/p/10976801.html