ITPub博客

首页 > 应用开发 > > 现有如下情景 A.exe调用B.dll,B.dll又去调用C.dll, 我需要在

现有如下情景 A.exe调用B.dll,B.dll又去调用C.dll, 我需要在

作者:piny 时间:2019-08-12 14:14:52 0 删除 编辑

情景:使用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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-05-13

  • 博文量
    137
  • 访问量
    8806