【发布时间】:2021-12-06 15:49:09
【问题描述】:
我正在尝试将 C++ 库包装到 C++/CLI 库中,以便在 C# 中使用。我在类型之间转换时遇到问题...
C++ 函数如下所示(这是来自 MyCppLib.h 文件,我无法更改 C++ 代码):
int CppFunc(void* Handle, wchar_t* Feature, long long* Value)
我的 C++/CLI 包装函数如下所示:
#include "MyCppLib.h"
#include <msclr\marshal.h>
#include <string.h>
#include <stdlib.h>
using namespace System;
using namespace System::Runtime::InteropServices;
using namespace msclr::interop;
namespace MyCppCliLib
{
int CppCliFunc(IntPtr Handle, String^ Feature, long long* Value) {
return ::CppFunc(Handle.ToPointer(), string_to_wchar(Feature), Value);
}
static wchar_t* string_to_wchar(String^ managedString)
{
marshal_context^ context = gcnew marshal_context();
wchar_t* unmanagedString = context -> marshal_as<wchar_t*>(managedString);
delete context;
return unmanagedString;
}
}
但是,我似乎无法将 String^ 编组为 wchar_t*... 出现错误 C2065 说“不支持此转换”。虽然如果我用const wchar_t* 替换它,它似乎可以工作......我不明白......而且我不确定我是否正确转换了句柄和值类型......
如何将 C++ void*、wchar_t* 和 long long* 类型转换为 C++/CLI?
【问题讨论】:
-
是的,我看到了那个,它看起来很丑,想知道是否有其他解决方案......