gpt4 book ai didi

c# - 如何使用 CString Reference 调用非托管 C++ DLL

转载 作者:太空宇宙 更新时间:2023-11-04 12:09:43 24 4
gpt4 key购买 nike

我正在使用 VS2010 围绕在其公共(public)接口(interface)中使用 MFC CString 的非托管 C++ DLL 构建 C++/CLI 包装器 DLL。非托管 C++ DLL 包含一个我需要访问的类。我的问题是此类包含使用 CString 引用的方法,例如:

BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format);

在我的 C++/CLI 包装器中,我试图像这样访问它

BOOL GetUmUnits(eSysU sysunit, String^ %cunit, String^ %format)
{
GetUnits(sysunit, marshal_as<CString>(cunit), marshal_as<CString>(format));
}

这给我一个编译器错误说明

C2665: msclr::interop::marshal_as : none of the 3 overload could convert all the argument types

GetUmUnits 将通过 C# 表单访问。 cunit和format需要通过非托管代码更新。

我做错了什么是不可能的?

最佳答案

您的包装器必须将托管的 String^ 转换为实际的 CString 对象并直接传递它。编码器不知道如何创建 CString 对象。

不同版本的 MFC 中有不同版本的 CString,因此您必须链接到与非托管 DLL 相同的 MFC 版本才能构建一个版本。

关于c# - 如何使用 CString Reference 调用非托管 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10337672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com