尝试读取或写入受保护的内存的平台调用错误

克雷格·加拉格尔

当我尝试使用平台调用示例(其中我尝试更改字符串的小写和大写)时,出现错误。

这是到目前为止我得到的:

class Program
{
    [DllImport("User32.dll", EntryPoint = "CharLowerBuffA",
     ExactSpelling = false,
     CharSet = CharSet.Unicode,
     SetLastError = true
      )]
    public static extern string CharLower(string lpsz);

    [DllImport("User32.dll",
     EntryPoint = "CharUpperBuffA",
     ExactSpelling = false,
     CharSet = CharSet.Unicode,
     SetLastError = true
      )]
    public static extern string CharUpper(string lpsz);     

    static void Main(string[] args)
    {
        string l = "teSarf";

        string ChangeToLower = CharLower(l.ToLower());
        string ChangeToUpper = CharUpper(l.ToUpper());
        Console.WriteLine("{0}", ChangeToLower);
        Console.ReadLine();   
    }
}

我不确定我在哪里出错,但是我认为这与EntryPoint有关

我必须使用UnicodeCharLowerBuffW也不起作用。

我怎样才能解决这个问题?

加布里埃尔·卢西(Gabriel Luci)

Microsoft的文档表明这CharLowerBuffA是该方法的ANSI变体,但是您正在指定Unicode。

通过指定CharSet = CharSet.Ansi-尝试使用ANSI-或如果需要Unicode,请使用CharLowerBuffWCharUpperBuffW

同样,该方法采用两个参数。您没有第二个。所以试试这个:

[DllImport("User32.dll", EntryPoint = "CharLowerBuffW",
 ExactSpelling = false,
 CharSet = CharSet.Unicode,
 SetLastError = true
  )]
public static extern string CharLower(string lpsz, int cchLength);

[DllImport("User32.dll",
 EntryPoint = "CharUpperBuffW",
 ExactSpelling = false,
 CharSet = CharSet.Unicode,
 SetLastError = true
  )]
public static extern string CharUpper(string lpsz, int cchLength);

并这样称呼它:

string ChangeToLower = CharLower(l, l.Length);

如果仍然无法解决问题,请尝试使用字符数组,例如NatarajC。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

P调用“尝试读取或写入受保护的内存”

尝试读取或写入受保护的内存

并行读取AutoCad数据库时出现“尝试读取或写入受保护的内存”错误

SQL-尝试读取或写入受保护的内存

通过DllImport在C#中调用C方法-尝试读取或写入受保护的内存

使用反射调用dll函数时尝试读取或写入受保护的内存

使用线程池限制最大线程数-尝试读取或写入受保护的内存错误

尝试读取或写入受保护的内存。这通常表明其他内存已损坏

尝试读取或写入受保护的内存:C ++的内存修改值

尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

OpenTK:尝试读取或写入受保护的内存。这通常表明其他内存已损坏

的OpenGL / OpenTK绘图与指数:尝试读取或写入受保护的内存问题

尝试读取或写入受保护的内存.....在Silverlight Windows Phone 8.1项目中

urlmon.dll引起的“尝试读取或写入受保护的内存”

打开SQL Server连接的原因:System.AccessViolationException尝试读取或写入受保护的内存

VB.NET访问-尝试读取或写入受保护的内存

添加单例Kafka生产者:尝试读取或写入受保护的内存

未处理的异常:System.AccessViolationException:尝试读取或写入受保护的内存

c# emgu/opencv 用法抛出异常 - 尝试读取或写入受保护的内存

附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏

PInvoke ReadFile kernel32:尝试读取或写入受保护的内存。这通常表明其他内存已损坏

启动MvvmCross Uwp应用程序时发生异常:“ System.AccessViolationException:尝试读取或写入受保护的内存”

尝试读取或写入受保护的内存。这通常表明其他内存已损坏,同时使用 C# 读取 CSV 文件

尝试使用GetClassName读取或写入受保护的内存

c dll 在 vb6 上工作正常,但在 vb.net 上出错(尝试读取或写入受保护的内存)

来自C#的本地调用尝试读取无效的内存

写入/读取受内存保护的进程的内存

调用类时尝试读取属性

System.AccessViolationException: '试图读取或写入受保护的内存。(为 C++ 库制作包装器)