写入传递给c ++ dll的vb字符串时崩溃

时间:2015-02-18 02:31:26

标签: c++ vb.net

使用visual studio 2012,我需要在C ++中将字符串传递给DLL。为此,在VB中我按s = new string(" ", 100)创建一个字符串,它创建一个100个空格的字符串s。然后我传递这个字符串,该字符串将被写入少于100个字符,并按预期传回新字符串。

在声明函数中我使用

...,s as string...

而不是:

by reference s as string

但是,如果在传递此字符串之前但在如上所述创建它之后,我在VB中将一个短字符串写入其中,例如s = "hi fox",然后将其传递给DLL并使用长于6的字符串写入其中chars,它崩溃!!

教训似乎是在使用new string()函数创建空字符串后,您无法在其中写入更短的字符串。就好像分配给VB中的字符串的内存不是你创建字符串的100个字符,但s的内存大小现在是较短字符串的大小。

如果这是合理的行为,我想知道。它与C ++的new函数完全不同,其中分配的内存大小不会因您写入的数组的大小而改变。

感谢您的任何回复和兴趣。

1 个答案:

答案 0 :(得分:0)

与C ++不同,VB字符串不与字符串标头一起存储,并且不包含终止零。当你分配" hi fox"对于字符串,100个字符的内存位置不再可用,由6个字符的字符串替换。您可以使用字节数组代替此参数的字符串,但您应该注意2字节字符。