声明特定长度的字符串

问题描述 投票:1回答:2

从Visual Basic中,我需要在用C实现的动态链接库(DLL)中调用一个函数。C函数具有签名

uint32_t F(char **str);

其中str是输出参数。数组*str的长度至少应为n个字符。在Visual Basic上,该函数声明为

<DllImport("lib.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Shared Function F(ByRef str As String) As UInteger
End Function

如何在Visual Basic中声明与C函数F的形式参数兼容的长度为n的字符串?

编辑:如果我将实际参数声明为例如,该函数调用将按预期工作

Dim str As String = "          "

假定n为10。但是,n是变量。

c vb.net vb.net-2010
2个回答
3
投票

VB中的String实际上是C端的BSTR,它是Windows API中的结构。

在C端,您使用Windows功能,例如SysAllocString来制造BSTR,并使用SysReleaseString释放内存。

您将无法(轻松地)在C和VB之间与uint32_t F(char **str);进行互操作。

进一步阅读:https://docs.microsoft.com/en-gb/previous-versions/windows/desktop/automat/string-manipulation-functions


0
投票

您可以用n个空格填充字符串。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim s As String = ""
    Dim n As Integer = 10
    Dim paddedStr = s.PadRight(n)
    Debug.Print(paddedStr.Length.ToString) 'Prints 10
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.