我有一个包含 AES 加密的 c++ dll,该函数有两个输入:
字符串:使用 AES 加密
字符串:加密输出
这是外部函数:
extern "C" __declspec(dllexport) void aes_crypter(const char* string_in , wchar_t* string_out);
void aes_crypter(const char* string_in , wchar_t* string_out)
{
std::string X_KEY = "abcdefghijklmnopqrstuvwxyz123412";
std::string X_PSS = "612345601234512";
//////// convert input text to LPCWSTR
const wchar_t* inputtext = convertCharArrayToLPCWSTR(string_in);
//////// convert LPCWSTR to string [const to string result wrong ]
std::wstring ws(inputtext);
std::string str(ws.begin(), ws.end());
//////// Encrypt
auto encr = encrypt(str, key, X_PSS);
//////// Convert and Return to Output String
std::wstring widestr = std::wstring(encr.begin(), encr.end());
const wchar_t* output_crypt = widestr.c_str(); /// CONVERT STD TO WCHAR
swprintf(string_out, 4096,output_crypt);
}
代码工作正常,问题出在我的 C# 应用程序中:
这是导入功能代码:
[DllImport("simpleAES.dll",
CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern void aes_crypter(string string_in, StringBuilder string_out);
问题 :
如果我将 CharSet 设置为 ANSI,输入字符串工作正常,在 C++ 中返回正确但输出字符串仅返回一个字符错误!
如果我将 CharSet 设置为 UNICODE,则输入字符串返回错误且只有一个字符。但是输出字符串返回正确!
我哪里出错了?我该如何解决?
相关分类