情景:使用C++开发了一个动态链接库DLL,有一个开放的接口,实现内容是将C#传入的字符串进行异或加密,然后将加密后的字符串返回,定义如下
C++
//data传入参数
//eData加密后的字符串
extern "C" __declspec(dllexport) int __stdcall Encrypt(const wchar_t* data, wchar_t* eData);
代码实现很简单,将C#传入的字符串每一个字符进行异或后放到eData中返回
C#
[DllImport("Encrypt.dll", EntryPoint = "Encrypt", SetLastError = true, CharSet = CharSet.Unicode,
ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
extern static int Encrypt(string data, string eData);
现在问题来了,如果我使用如上定义,通过string传递,一切正常,但是如果改成如下定义,使用stringbuilder,那么可能会在后面多1个字符,这个多的字符还不一定是什么
extern static int Encrypt(string data, StringBuilder eData);
因为内部仅仅是对每一位字符进行异或,所以data和eData的长度应该是一致的,初始化StringBuilder时,就是按照data的长度去初始化,可是返回时,StringBuilder的长度可能会多
1个随机字符,这是怎么回事,本人C++纯自学了几天,很多还不是太清楚
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3034/viewspace-3162914/ ,如需转载,请注明出处,否则将追究法律责任。