.net 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
/// <summary>
/// 指定路径
/// </summary>
private const string dllport = "xxxx.dll";
/// <summary>
/// 打开打印机;
/// </summary>
/// <param name="pPrinterName"></param>
/// <returns>TRUE-打印机句柄已获得,FALSE-打印机句柄未获得;</returns>
[DllImport(dllport, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern bool HWX_Open(string pPrinterName);
出现这种问题
-
第一:检查 dllport 指向的文件名称是否正确。有可能指向了名字相近的DLL 刚好里面也有相同的方法名参数不同。
-
第二:有的dll只支持 x86,或不能开启“允许不安全的代码”
-
第三:传递的参数问题, C++ 参数名称为 char* 的在C# 表示为string。或者有的需要加上 ref 、out 的参数属性。