写入传递给 C++ DLL 的 VB 字符串时崩溃

crashing when writing to a vb string passed to c++ dll

本文关键字:VB 字符串 崩溃 DLL C++      更新时间:2023-10-16

使用 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 个字符的字符串写入其中,它会崩溃!!

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

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

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

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