//源文件中代码
#include "pch.h"
#include "cl1.h"
#include "stdio.h"//File需要引用的文件不然不能够给它一个指针(File* file;)
extern "C"
{
int Add(int a, int b)//加法函数
{
return a + b;
}
}
int Sub(int a, int b) //减法函数
{
return a-b;
}
extern "C"
{
void Write_file()
{
char cA[] = { 'a','b','c','d','1','2','3' };//字符数组(需要写入的)
FILE* fp;//文件指针
fp = fopen("D:\\test1.txt", "w");//打开文件,w是写入,"D:\\test1.txt"被打开的文件名(写入字符的位置)
if (fp == nullptr)//如果写入的文件为空
{
printf("未找到此文件");
}
else如果写入的文件不为空
{
for (int i = 0;i < 7;i++)//循环数组取值
{
fprintf(fp, "%c", cA[i]);
printf("%c\n", cA[i]);
}
fclose(fp);//关闭文件指针(必须要)
}
}
}
extern "C"
{
void wei(char* cA)//给一个字符串的有参函数
{
FILE* fp;
fp = fopen("D:\\test1.txt", "w");
if (fp == nullptr)
{
printf("未找到此文件");
}
else
{
fprintf(fp, "%s",cA);//%s是整个字符串
fclose(fp);
}
}
}
头文件中代码
//宏定义导出
#ifdef MyDLL_d//如果没有定义DLLH就定义 DLLH _declspec(dllexport)
#define BHDLL _declspec(dllexport)//导出//BHDLL为我所定义的宏(可以自己命名)
#else
#define BHDLL _declspec(dllimport)//导出
#endif //DLLH_ 如果没有定义DLLH 就定义DLLH
#endif
//导出函数
extern "C"
{
BHDLL int Add(int a, int b);//声明加法函数
}
BHDLL int Sub(int a, int b);//声明减法函数
extern "C"
{
BHDLL void Write_file();//声明写入文件的函数
}
extern "C"
{
BHDLL void Write_filechar(char* cA);//声明带参的写入文件函数
}
//控制台程序中
//LoadLibrary函数加载dll
HMODULE hModule = LoadLibrary("D:\\Users\\Administrator\\source\\repos\\Dll2\\Debug\\Dll2.dll");//dll的地址D:\\Users\\Administrator\\source\\repos\\Dll2\\Debug\\Dll2.dll(绝对路径)
if (hModule != NULL)
{
//处理错误
}
typedef int(*MyDLL)(int,int);//给的指针
MyDLL myDll = (MyDLL)GetProcAddress(hModule, "Add");//DLL里面的函数方法Add的调用
if (myDll == NULL)//得到的指针为空
{
printf("add is null\n");
}
if (myDll)//得到的指针不为空
{
int nD = myDll(4, 5);//add函数的add(int a,int b)对应了add(4,5)
printf("%d\n", nD);
}
//动态链接库的调用(动态调用都需要dll文件)
typedef int(*MyDll)(char cDa);//给的指针
MyDll mydll = (MyDll)GetProcAddress(hModule, "Write_file");//文件写入的函数
if (mydll == NULL) //指针为空
{
printf("文件未写入");
}
if (mydll)
{
mydll((char*)"abc");
printf("文件已写入");
}
//带参数的文件写入(如果需要安全性高一点可以在后面加一个size(大小)去限制)
typedef int(*MyDLl)(char *cAa);//给的指针
MyDLl myDLl = (MyDLl)GetProcAddress(hModule, "Write_filechar");//文件写入的带参函数
if (myDLl == NULL) //指针为空
{
printf("文件未写入");
}
if (myDLl)
{
myDLl((char*)"abc");
printf("文件已写入");
}
int m = Add(2, 4);//静态链接库的加法函数(要引用lib文件)
printf("%d\n", m);
int w = Sub(7,3);//静态链接库的减法函数(要引用lib文件,静态调用都要lib文件)
printf("%d\n", w);
printf("pause");
return 0;
}