热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从C++到C#的字符串元组数组

我在封送处理字符串上使用MicrosoftDocs示例。该代码不会崩溃,但不会在C#中返

我在封送处理字符串上使用microsoft Docs示例。该代码不会崩溃,但不会在C#中返回预期的字符串。调用本机代码时,字符串未修改,因此我想知道此示例是否过时?

如果该示例不适用于其他人,是否还有另一种方法将C ++字符串数组编组为C#?

此处的C ++示例:
https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/as6wyhwt(v=vs.100)?redirectedfrom=MSDN

PINVOKELIB_API int TestArrayOfStrings( char* ppStrArray[],int count )
{
int result = 0;
STRSAFE_LPSTR temp;
size_t len;
const size_t alloc_size = sizeof(char) * 10;
for ( int i = 0; i {
len = 0;
StringCchLengthA( ppStrArray[i],STRSAFE_MAX_CCH,&len );
result += len;
temp = (STRSAFE_LPSTR)CoTaskMemAlloc( alloc_size );
StringCchCopyA( temp,alloc_size,(STRSAFE_lpcstr)"123456789" );
// CoTaskMemFree must be used instead of delete to free memory.
CoTaskMemFree( ppStrArray[i] );
ppStrArray[i] = (char *) temp;
}
return result;
}

此处的C#对应示例:
https://docs.microsoft.com/en-us/dotnet/framework/interop/marshaling-different-types-of-arrays

internal static class NativeMethods
{
[DllImport("..\\LIB\\PinvokeLib.dll",CallingCOnvention= CallingConvention.Cdecl)]
internal static extern int TestArrayOfstrings(
[In,Out] string[] stringArray,int size);
}
// string array ByVal
string[] strArray = { "one","two","three","four","five" };
Console.WriteLine("\n\nstring array before call:");
foreach (string s in strArray)
{
Console.Write(" " + s);
}
int lenSum = NativeMethods.TestArrayOfstrings(strArray,strArray.Length);
Console.WriteLine("\nSum of string lengths:" + lenSum);
Console.WriteLine("\nstring array after call:");
foreach (string s in strArray)
{
Console.Write(" " + s);
}





推荐阅读
author-avatar
手机用户2502923413
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有