当我尝试使用平台调用示例时,我正在尝试更改字符串的大小写。
这是我到目前为止所得到的:
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 有关。
我必须使用 Unicode 而 CharLowerBuffW 也无法使用。
我该如何解决这个问题?
答案 0 :(得分:3)
Microsoft's documentation表示CharLowerBuffA
是该方法的ANSI变体,但您指定的是Unicode。
尝试使用ANSI - 指定CharSet = CharSet.Ansi
- 或者如果您需要Unicode,请使用CharLowerBuffW
和CharUpperBuffW
。
同样,该方法有两个参数。你没有第二个。所以试试这个:
[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所述。
答案 1 :(得分:1)
相同的结果意味着,它仍然给出相同的错误,在调用方法时尝试使用string.ToCharArray(),将签名更改为char数组。