C# 为什么我的字符串参数在c++;导入方法 我在C++代码中使用C++方法,除了一种方法< /P>以外,一切都很好。 我在C++代码中打印了参数的值,他和我在C代码中使用的不同

C# 为什么我的字符串参数在c++;导入方法 我在C++代码中使用C++方法,除了一种方法< /P>以外,一切都很好。 我在C++代码中打印了参数的值,他和我在C代码中使用的不同,c#,visual-c++,pinvoke,C#,Visual C++,Pinvoke,这就是我在C代码中调用的方法 \u declspec(dllexport)unsigned int\u stdcall FindPattern(常量字符*签名,常量字符*掩码) { 返回Networking::instance()->findPattern(签名、掩码); } 进口 [DllImport(“NtCore.dll”,CallingConvention=CallingConvention.StdCall)] 内部静态外部uint FindPattern(字符串签名、字符串掩码);

这就是我在C代码中调用的方法

\u declspec(dllexport)unsigned int\u stdcall FindPattern(常量字符*签名,常量字符*掩码)
{
返回Networking::instance()->findPattern(签名、掩码);
}
进口

[DllImport(“NtCore.dll”,CallingConvention=CallingConvention.StdCall)]
内部静态外部uint FindPattern(字符串签名、字符串掩码);
召唤

uint address=\u session.FindPattern(“\x3B\x43\x00\x75\x0E\x8B\x44\xBB\x08”,“xx?xxxxxx”);
签名参数等于“C”,而不是“\x3B\x43\x00\x75\x0E\x8B\x44\xBB\x08”

”\x3B\x43\x00“
实际上是一系列字节,相当于
“C”
0x3b
是分号,
0x43
是大写的
C
0x00
是NUL终止符

如果需要文本字符串,则应使用如下内容对
\
字符进行转义:

"\\x3B\\x43\\x00\\x75\\x0E\\x8B\\x44\\xBB\\x08"
“\x3B\x43\x00”
实际上是一系列字节,相当于
“C”
0x3b
是分号,
0x43
是大写的
C
0x00
是NUL终止符

如果需要文本字符串,则应使用如下内容对
\
字符进行转义:

"\\x3B\\x43\\x00\\x75\\x0E\\x8B\\x44\\xBB\\x08"

C字符串不能包含嵌入的0,因为0用于确定字符串长度。是2。因此它实际上不是一个字符串,只有在C代码中使用byte[]才能获得成功。另外,C代码必须显式传递数组的长度。C字符串不能包含嵌入的0,因为0用于确定字符串长度。是2。因此它实际上不是一个字符串,只有在C代码中使用byte[]才能获得成功。C代码必须显式地传递数组的长度,这增加了额外的负担。