写常规dll之悟

 为了写一个读取文件内容的dll,通过将文件路径传给dll函数进行调用。dll的编写实现如下:

1.dll生成

两个文件,头文件dataIO.h和实现文件dataIO.cpp,

其中dataIO.h如下

#include <vector>
using namespace std;

struct _declspec(dllexport) SMStruct{   //此导出结构体用于存放文件每一行的信息
	char mobile[15];
	//char date[9];
	char datatime[20];
	char comand[15];
};

struct _declspec(dllexport) SMSVecStruct{  //此导出结构体用于存放整个文件所有行的信息
	int smsN;
	vector<SMStruct> smsVector;
};

extern "C" _declspec(dllexport) SMSVecStruct readSMS(char *filename);//导出读取文件内容函数


dataIO.cpp文件内容如下

#include "dataIO.h"
#include <fstream>
#include <iostream>


extern "C" _declspec(dllexport) SMSVecStruct readSMS(char *filename)
{
	fstream smsFile;
	locale::global(std::locale(""));
	smsFile.open(filename,ios::app|ios::in);

	char buf[256];
	int smsn=0;

	SMSVecStruct smsVec;

	smsFile>>buf;
	while(!smsFile.eof())
	{
		smsn++;

		SMStruct sms;
		sms.mobile[0]='\0';
		sms.datatime[0]='\0';
		sms.comand[0]='\0';

		cout<<buf<<' ';
		strcat(sms.mobile,buf);

		smsFile>>buf;
		cout<<buf<<' ';
		strcat(sms.datatime,buf);

		smsFile>>buf;
		cout<<buf<<endl;
		strcat(sms.comand,buf);

		smsFile>>buf;

		smsVec.smsVector.push_back(sms);
	}

	smsVec.smsN=smsn;


	smsFile.close();

	return smsVec;
}

 


2.调用dll

上面的代码实现就是用于建立所需dll文件即dataIO.dll,将此dll文件放到你所新建的工程目录的debug中以供你的程序来调用,在main函数之前加入

#include "dataIO.h"  (这句是因为有结构体的导出,所以要包含上面相关的头文件)

struct _declspec(dllexport) SMStruct; (这句是结构体SMStruct的导出)
struct _declspec(dllexport) SMSVecStruct;(这句是结构体SMSVecStruct的导出)

对于函数可以有多种方式导出

 

main函数文件代码如下

#include <iostream>
#include <Windows.h>
using namespace std;

#include "dataIO.h"

struct _declspec(dllexport) SMStruct;
struct _declspec(dllexport) SMSVecStruct;

int main()
{
	typedef SMSVecStruct (*pReadSMS)(char *filename);
	pReadSMS readSMS=NULL;
	HINSTANCE hDll;
	//wstring dllFile="dataIO.dll";
	hDll=LoadLibrary("dataIO.dll");
	readSMS=(pReadSMS)GetProcAddress(hDll,"readSMS");

	if (readSMS)
	{
		SMSVecStruct smsVec=readSMS("G:\\znc\\c&c++\\allTest\\allTest\\Debug\\msgs.txt");
		//cout<<"调用dll后s="<<s<<endl;
	}

	FreeLibrary(hDll);

	getchar();
	return 0;
}


 



 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值