【发布时间】:2018-09-02 00:28:52
【问题描述】:
我正在开发一个带有 C 包装器的 C++ DLL,以便能够在不同的语言上使用它。目前,我也在用 C# 开发一个调用我的 DLL 的插件。
我想要传递一个字符串(文件的路径)作为我的 DLL 的参数,以便能够在我的 DLL 上使用它。
C#
[DllImport(DllName, CallingConvention = DllCallingConvention)]
public static extern IntPtr AllocateHandle(string filename);
C 包装器
LPVOID SAMPLEDLL_API CALLCONV_API AllocateHandle(char* filename);
C++ 类构造函数
CustomData::CustomData(char* filename)
{
_filename = filename; // string _filename;
}
当我将 _filename 保存在文件上时(因为我没有找到在 DLL 上使用断点进行调试的方法),我有类似 ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ0à× 的东西。我尝试了不同的解决方案将 char* 转换为字符串,但结果仍然相同。
提前感谢您的帮助。
【问题讨论】:
-
我想你需要用
[MarshalAs(UnmanagedType.LPStr)]装饰你的filename -
第一次评论没有,对不起,我发现了 DLL、插件等的世界,所以 MarshalAs 目前对我没有任何意义,我更愿意在此之前尝试第一个答案,它正在工作,所以谢谢都一样
标签: c# c++ c string type-conversion