我试图以多种方式做到这一点,但没有一个是有效的.有人有一个正确的例子吗?我只想将wchar_t*值从函数移动到C#级别.
我正在使用 C# 代码,需要在 C++ dll 中调用此方法。
static std::wstring DecryptData(const std::wstring& strKey);
Run Code Online (Sandbox Code Playgroud)
我读过很多东西,我最好的猜测是传递一些对于两种语言都更容易阅读的东西,比如字符数组甚至字节数组,然后在 C++ 中构建 wstring,然后在 C# 中构建字符串。
有人已经这样做了吗?
编辑:
我阅读了链接主题,但没有一个答案对我有帮助:使用const没有帮助。
这就是我现在拥有的:C#
[DllImport(DLL_PATH, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.LPWStr)]
public static extern string DecryptData([MarshalAs(UnmanagedType.LPWStr)]string strKey);
Run Code Online (Sandbox Code Playgroud)
C++
extern "C" __declspec(dllexport) const std::wstring DecryptData(const std::wstring& strKey) {
return WlanHelper::CWirelessHelper::DecryptData(strKey);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个 PInvokeStackImbalance =/