2016-04-11 16 views
5

文字列のLowerとUpperの大文字と小文字を変更しようとしているプラ​​ットフォーム呼び出しの例を使用しようとするとエラーになります。私はこれで間違っているつもりどこプラットフォームの呼び出しエラーが保護されたメモリを読み書きしようとしました

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(); 
    } 
} 

私はわからないが、私はそれがエントリーポイントで行うことだと思います。ここでは

は、私がこれまでに得たものです。

使用する必要がありますユニコードCharLowerBuffWはどちらも動作しませんでした。

どうすればこの問題を解決できますか?

答えて

3

Microsoft's documentationは、CharLowerBuffAがそのメソッドのANSIバリアントであることを示していますが、Unicodeを指定しています。

CharSet = CharSet.Ansiを指定してANSIを使用するか、またはUnicodeが必要な場合は、CharLowerBuffWCharUpperBuffWを使用してください。

また、メソッドには2つのパラメータがあります。あなたは第2のものを持っていません。

[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が述べたように、文字配列を使用してみてください。

+2

CharUpperBuffWと同じ結果が得られました。ユニコードが必要です –

+0

lengthパラメータが不足しています。私は私の答えを更新しました。 –

1

同じ結果は、同じエラーが発生していることを意味します。メソッドを呼び出すときにstring.ToCharArray()を使用して、署名をchar配列に変更してください。

関連する問題