使用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
函数完全不同,其中分配的内存大小不会因您写入的数组的大小而改变。
感谢您的任何回复和兴趣。
答案 0 :(得分:0)
与C ++不同,VB字符串不与字符串标头一起存储,并且不包含终止零。当你分配" hi fox"对于字符串,100个字符的内存位置不再可用,由6个字符的字符串替换。您可以使用字节数组代替此参数的字符串,但您应该注意2字节字符。