gpt4 book ai didi

c# - 将 C# 字符串传递给 C++,并将 C++ 结果(字符串、char*.. 任何)传递给 C#

转载 作者:IT老高 更新时间:2023-10-28 21:40:39 31 4
gpt4 key购买 nike

我尝试了不同的方法,但我对 Interop 很生气。

(这里的字符串不是指变量类型,而是“字符的集合”):我有一个在 dll 中定义的非托管 C++ 函数,我试图从 C# 访问该函数,该函数有一个字符串参数和一个字符串返回值,如下所示:

string myFunction(string inputString)
{
}

C++ 端的字符串应该是什么?和 C# 之一?以及为此需要哪些参数 DllImport?

最佳答案

我发现最有效的方法是更明确地说明这里发生的事情。在这种情况下,可能不建议使用字符串作为返回类型。

一种常见的方法是让 C++ 端传递缓冲区和缓冲区大小。如果它对于 GetString 必须放入的内容不够大,则修改 bufferSize 变量以指示适当的大小。然后调用程序 (C#) 会将缓冲区的大小增加到适当的大小。

如果这是您导出的 dll 函数 (C++):

extern "C" __declspec void GetString( char* buffer, int* bufferSize );

匹配的 C# 如下:

void GetString( StringBuilder buffer, ref int bufferSize );

因此,要在 C# 中使用它,您需要执行以下操作:

int bufferSize = 512;
StringBuilder buffer = new StringBuilder( bufferSize );
GetString( buffer, ref bufferSize );

关于c# - 将 C# 字符串传递给 C++,并将 C++ 结果(字符串、char*.. 任何)传递给 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2179270/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com