c++动态库显示加载方法

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

#include <afx.h>

typedef dictionary * (*iniLoad)(const char * ininame);
typedef void(*iniDump)(dictionary * d, FILE * f);
typedef char * (*iniGetsecname)(dictionary * d, int n);
typedef int (*iniGetsecnkeys)(dictionary * d, const char * s);
typedef char * (*iniGetstring)(dictionary * d, const char * key, const char * def);
typedef int (*iniGetint)(dictionary * d, const char * key, int notfound);
typedef void (*iniFreedict)(dictionary * d);


int main(void)
{
	dictionary *ini;
	int n = 0;
	char *str;
	HINSTANCE hdll;
	iniLoad LoadFun;
	iniDump iniparser_dump;
	iniGetsecname iniparser_getsecname;
	iniGetsecnkeys iniparser_getsecnkeys;
	iniGetstring iniparser_getstring;
	iniGetint iniparser_getint;
	iniFreedict iniparser_freedict;


	hdll = LoadLibrary(_T("iniparer.dll"));
	if (NULL == hdll)
	{
		FreeLibrary(hdll);
		exit(-1);
	}

	LoadFun = (iniLoad)GetProcAddress(hdll, "iniparser_load");
	if (NULL == LoadFun)
	{
		FreeLibrary(hdll);
		exit(-1);
	}

	ini = LoadFun("example.ini");//parser the file
	if (ini == NULL)
	{
		fprintf(stderr, "can not open %s", "example.ini");
		exit(EXIT_FAILURE);
	}

	iniparser_dump = (iniDump)GetProcAddress(hdll, "iniparser_dump");
	if (NULL == iniparser_dump)
	{
		FreeLibrary(hdll);
		exit(-1);
	}
	printf("dictionary obj:\n");
	iniparser_dump(ini, stderr);//save ini to stderr

	iniparser_getsecnkeys = (iniGetsecnkeys)GetProcAddress(hdll, "iniparser_getsecnkeys");
	if (NULL == iniparser_getsecnkeys)
	{
		FreeLibrary(hdll);
		exit(-1);
	}
	printf("number of keys in %s is %d\n", "tcp", iniparser_getsecnkeys(ini, "tcp"));

	iniparser_getsecname = (iniGetsecname)GetProcAddress(hdll, "iniparser_getsecname");
	if (NULL == iniparser_getsecname)
	{
		FreeLibrary(hdll);
		exit(-1);
	}

	printf("\n%s:\n", iniparser_getsecname(ini, 0));//get section name

	iniparser_getint = (iniGetint)GetProcAddress(hdll, "iniparser_getint");
	if (NULL == iniparser_getint)
	{
		FreeLibrary(hdll);
		exit(-1);
	}
	n = iniparser_getint(ini, "tcp:port", -1);
	printf("port : %d\n", n);

	iniparser_getstring = (iniGetstring)GetProcAddress(hdll, "iniparser_getstring");
	if (NULL == iniparser_getstring)
	{
		FreeLibrary(hdll);
		exit(-1);
	}
	str = iniparser_getstring(ini, "tcp:ip", "null");
	printf("ip : %s\n", str);

	str = iniparser_getstring(ini, "tcp:family", "null");
	printf("family : %s\n", str);

	printf("\n%s:\n", iniparser_getsecname(ini, 1));
	n = iniparser_getint(ini, "serial port:speed", -1);
	printf("speed : %d\n", n);

	iniparser_freedict = (iniFreedict)GetProcAddress(hdll,"iniparser_freedict");
	if (NULL == iniparser_freedict)
	{
		FreeLibrary(hdll);
		exit(-1);
	}

	iniparser_freedict(ini);//free dirctionary obj
	FreeLibrary(hdll);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值