vc++ 2017 编写pb(powerbuilder)可以调用的dll库程序(含C语言字符串处理函数)

powerbuilder 程序开发过程,经常会调用一些外部函数(dll动态链接库),本文介绍 vc++如何编写,pb可以调用的dll库函数。

示例使用IDE:microsoft visual studio 2017
一、创建一个动态链接库(DLL)项目。

在这里插入图片描述


二、编写一个简单的函数,接收一个intarg1,返回arg1+1的结果。
#include "stdafx.h"

extern "C"
{
	_declspec(dllexport) int funcA(int arg1)
	{
		int res;
		res = arg1 + 1;
		return res;
	}
}

三、def模块定义文件的创建及绑定
尝试编译输出DLL,并在PB中进行声明调用。这时会发现,PB无法调用,会产生类似图中的错误。
error:error calling external function XXX ....

在这里插入图片描述


这是缺少模块定义文件。
1、按图中操作添加一个def文件

在这里插入图片描述

2、在应用属性页面,确定链接器=》输入=》模块定义文件 已绑定上面生成的文件。

在这里插入图片描述

3、编辑def文件。
文件比较简单,标识dll文件名,和包含的函数列表就可以了
注意函数名要和程序中定义的相同,且区分大小写

在这里插入图片描述


四、调用约定的设置。
再次尝试编译输出DLL,并在PB中进行声明调用,结果又产生了类似图中的另一个错误。
error:specified argument type differs from ....

在这里插入图片描述


解决这个问题需要设置调用约定
同样,打开应用的属性页面,按图中操作即可

在这里插入图片描述


尝试编译输出,第一个dll 库函数就完成了

在这里插入图片描述


如果函数需要处理字符串,要稍微复杂一些

创建一个字符串处理的函数
一、新增代码内容
_declspec(dllexport) char* funcB(char* arg1)
	{
		static char res[50];
		strcpy(res,"测试字符串+")		
		strcat(res, arg1 );		
		return res;
	}


二、直接编译,会有一个错误

在这里插入图片描述

错误大致的原因,是字符串操作函数又内存溢出的风险.
需要添加预处理器定义,按图中操作添加_CRT_SECURE_NO_WARNINGS

在这里插入图片描述


至此,库函数通常已经可以正常工作,不过复制到其他没有IDE环境中,可能会提示缺少相关DLL,按图操作,更改运行库为:多线程 /MT .编译后的DLL文件大小要比原先大一些。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值