C语言编写DLL,返回字符串以\0结束符结尾

C语言编写DLL,其中一个函数返回字符串以\0结束符结尾(abc\0),用VB调用DLL的时候返回的字符串因为带\0,len()方法计算字符串长度为实际长度+1,也就是\0结束符被当作字符计算了,在VB中可以用replace("字符串",Chr(0),"")来处理。
现在我是想VB 不处理,而C编写的DLL返回字符串不带\0结束符,请问怎么办?
我用delphi编写的DLL,调用返回的正常。

4个回答

使用字符串数组 char[]var ,初始化不能用字符串("abc"),用{'a','b','c'},带长度和var,就行了,

jonhy_love
jonhy_love 感谢,我在dll中返回字节数组了,VB声明String能够正常使用 谢谢大家的热情帮助,分数不多,再次谢谢大家。
接近 3 年之前 回复

在VB里处理不要用Replace,而是用s = Left(s, Instr(s, Chr(0)) - 1),C语言靠\0作为字符串的结束符,如果没有\0,那么会和之后没有初始化的内存混淆在一起反而不好判断。
如果你VB调用觉得不方便,不妨封装一个函数使用。

jonhy_love
jonhy_love 感谢,我在dll中返回字节数组了,VB声明String能够正常使用 谢谢大家的热情帮助,分数不多,再次谢谢大家 。 llesss_12 说的正确,不是我手动加结束符 是在C中初始化时候自动加了结束符 而我不想有结束符。最后解决方案是,返回字符数组,VB声明String 会自动把字符数组转成String。
接近 3 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复jonhy_love: 是的,vb的string包含长度,因为vb使用的是ole的bstr类型。
接近 3 年之前 回复
jonhy_love
jonhy_love 字VB封装函数或者replace left都能解决,我是想我在编写DLL的时候避免这种情况,我查阅网上,好像是C的机制导致的结束符,好像听说string这个类处理的字符串不会有结束符。
接近 3 年之前 回复

就不应该返回\0,而是直接返回字符串。

jonhy_love
jonhy_love 感谢,我在dll中返回字节数组了,VB声明String能够正常使用 谢谢大家的热情帮助,分数不多,再次谢谢大家。
接近 3 年之前 回复
jonhy_love
jonhy_love 不返回 那么该怎么处理,其他语言调用怎么直到那里是字符串结束? 高级语言中一般字符串类都有字符串的长度属性,C中没有
接近 3 年之前 回复

是通过 Declare 语句声明函数的标准Dll?
1)你应该把参数声明为 String 类型,VB 会自动进行末尾 \0 的处理。
2)VB 用 Space() 或 String() 函数创建供写入的字符串缓冲区时,不需要包含 \0 的长度。

jonhy_love
jonhy_love 1、是Declare 语句声明函数的标准Dll DLL本身是用易语言写的,编译器是VC6.0的编译器。2、我声明返回参数类型为String 还是会有结束符必须再套上一层函数或者处理掉Chr(0)才行。处理方式我都懂,我是期望能够 在编写的DLL中不出现结束符。易语言编写dll,返回类型是文本型,VB调用发现带结束符
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问