DLL字符串参数做返回值的看法

本文介绍了作者在使用C++Builder编写DLL时遇到的字符串返回值问题。由于DLL无法像VB的ActiveX DLL那样进行初始化和释放操作,作者采取了通过布尔返回值表示串口操作成功与否,而字符串数据则通过特定方式处理。在C++Builder中,字符串不能直接作为参数返回,作者借鉴网上的资料,利用BSTR和LPSTR的相似性,实现了通过传值方式传递字符串地址,从而在API调用后返回数据。这种方式避免了对实参内容的修改,符合高级语言的传值调用规则。
摘要由CSDN通过智能技术生成

        最近在写几个串口程序,由于以前都是用VB6写ActiveX DLL做通讯 ,里面加入Mscomm32.ocx做为通讯控件,已经很熟练了.可是对于VB的执行效率很是不满意,于是又拿起C++Builder与RS232通讯的书开始啃起来.打算用C++Builder来写上位机与下位机的通讯动态连接库,用VB做界面开发.

        由于初次学C++语言,很多时间都不明白指针跟引用的关系,里面的字符串也有好多种类,其中AnsiString,Char * Char [],String 之间总是搞不清楚,所以进度很慢.

        首先,VB的ActiveX DLL可以在引用的时候对串口进行初始化,都可以放在Class_Initialize里进行,也可以在退出的时候在Class_Terminate里对程序进行释放等操作.可是C++Builder写的DLL就没办法操作(才学几天,可能说的不对,应该有对DLL初始化操作,本人至今未学会),所以就只能写两个函数,一个是串口打开,一个是串口关闭,这两个函数做为内部函数,不对VB开放.这两个也是用的最多的函数.其次,VB可以用Variant数据类型对串口进行连继的读取,可以用变量加变量的方式把数据接收完.可是在C++Builder里就没办法(我是菜鸟,望大虾指导,邮箱 alpha704@163.com),只能用一个定长Char[]数组操作,每次接收完了把变量转成AnsiString然后相加,这样最后得到全部数据.再把数据转成Char *指针变量,传递出去.讲了这么多,最主要的还没讲到.下面接着来.

        先讲讲传参数吧,首先我的函数都有返回值,函数名就是返回值,但不是对数据的返回,是对串口是否通讯成功的返回,也就是说一个布尔型(bool)数据,如果串口打不开,机器不在线或串口返回值错的我都返回false,如果全部操作都正确了,才返回true.也就是说,一个返回值是对串口操作而言,一个是对下位机数据的返回值.这里有用到字符串数据,关键在这里,字符串数据没办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值