提问人:MatthieuCross 提问时间:8/30/2023 最后编辑:MatthieuCross 更新时间:8/30/2023 访问量:59
方法未返回与 main 中的代码块相同的结果。相同的代码
Method not returning same result as a block of code in main. Identical code
问:
我正在制作一个控制台应用程序,它将 c# 中的数据发送并返回到 dll(c++),并返回它。 我让它工作,但遇到了一个我无法理解的问题。
当我在 main 方法中调用代码块时,它可以工作,但是当我创建一个方法(使用相同的代码块)并从 main 方法调用它时,它会中断。我不知道如何更好地解释,所以我会把代码放给你看。
[DllImport("ActivatorDll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
public static extern IntPtr fullname(byte[] firstname, byte[] lastname);
static void Main(string[] args)
{
string fn = "Foo";
string ln = "United";
IntPtr nameResult = fullname(Encoding.Default.GetBytes(fn), Encoding.Default.GetBytes(ln));
int len = 0;
while (Marshal.ReadByte(nameResult, len) != 0) ++len;
byte[] buffer = new byte[len];
Marshal.Copy(nameResult, buffer, 0, buffer.Length);
string res = Encoding.Default.GetString(buffer);
string res2 = StringFromNative(nameResult);
Console.WriteLine(res);
Console.WriteLine(res2);
Console.ReadLine();
}
public static string StringFromNative(IntPtr native)
{
int len = 0;
while (Marshal.ReadByte(native, len) != 0) ++len;
byte[] buffer = new byte[len];
Marshal.Copy(native, buffer, 0, buffer.Length);
return Encoding.Default.GetString(buffer);
}
RES 正在按预期工作。但是 RES2 不起作用
谢谢!
我尝试在这里和其他平台上寻找解决方案或解释,但在任何地方都得不到答案。
DLL 的 CPP 中的 fullName 函数
char* fullname(char* firstname, char* lastname)
{
char result[1000] = "";
strcpy_s(result, firstname);
strcat_s(result, " ");
strcat_s(result, lastname);
return result;
}
答: 暂无答案
评论
fullname
result
string
StringBuilder
int fullname(const char* firstname, const char* lastname, char* buffer, int bufferSize)
.... CharSet.Ansi)] public static extern int fullname(string firstname, string lastname, StringBuilder buffer, int bufferSize);
StringBuilder