gpt4 book ai didi

c# - c#中如何获取Marshal的值

转载 作者:行者123 更新时间:2023-11-30 12:31:15 24 4
gpt4 key购买 nike

我有以下几行代码:

public static string getTrack1(string track1, int len)
{
IntPtr track1Ptr = UnsafeNativeMethods.Decrypt(track1, len);
Byte[] track1b = new Byte[200];
Marshal.Copy(track1Ptr, track1b, 0, track1b.Length);
return track1b.ToString();
}

解密方法的减速是:

internal static class UnsafeNativeMethods
{
[DllImport(_dllLocation, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr Decrypt(string track1, int dataLen);
}

我正在从 visual c++ 代码返回 unsigned char* 并且每当我从 c# 代码调用 dll 时它总是返回“System.Byte[]"而不是值。我在 marshal 中做错了什么吗?

请帮帮我

最佳答案

您错过了从 byte[] 到 string 的转换,但您必须定义什么是编码。这可能有效:

public static string getTrack1(string track1, int len)
{
IntPtr track1Ptr = UnsafeNativeMethods.Decrypt(track1, len);
Byte[] track1b = new Byte[200];
Marshal.Copy(track1Ptr, track1b, 0, track1b.Length);
return Encoding.Default.GetString(track1b);
}

但这样做会更好;

public static string getTrack1(string track1, int len)
{
IntPtr track1Ptr = UnsafeNativeMethods.Decrypt(track1, len);
return Marshal.PtrToStringAnsi(track1Ptr);
}

如果编码是 Ansi(=默认)

关于c# - c#中如何获取Marshal的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14053318/

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