【发布时间】:2018-12-07 09:52:35
【问题描述】:
C dll 头是这样的:
HRESULT App_Process(char *FileName, char *Output, const bool& LogInformation);
我的 C# DllImport 如下所示:
[DllImport("App.dll")]
public static extern Int32 App_Process(
[MarshalAs(UnmanagedType.LPStr)]string FileName,
[MarshalAs(UnmanagedType.LPStr)]string Output,
[MarshalAs(UnmanagedType.Bool)]bool LogInformation);
例外是:
var result = App_Process("MyFile.txt", "Output.txt", true);
System.AccessViolationException:试图读或写保护 记忆。这通常表明其他内存已损坏。
现在奇怪的是,该方法成功地完成了它应该做的所有事情。
有什么想法吗?
【问题讨论】:
-
也许最后一个参数应该是
ref bool? -
所有
MarshalAs属性都是没有意义的,只是像它们一样重申默认值。最后一个参数是ref bool。调用约定未知。看起来这两个字符串参数可能是输出参数,因为它们是char*而不是const char*。我建议您在尝试调用它之前阅读该库的文档。 -
@DaisyShipton 是的,ref bool 解决了这个问题。请发布它作为答案。谢谢。
标签: c# dllimport unmanaged access-violation managed