2016-04-11 15 views
5

Alt ve üst dize durumunda değiştirmeye çalıştığım örnek, platform çağırma örneği kullanmaya çalıştığımda hata alıyorum. Ben bu konuda yanlış gidiyorumPlatform Karşılaşılan hata korumalı bellek okuma veya yazma girişiminde bulundu

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

Emin değilim ama GirişNoktası ile ilgisi olduğunu düşünüyorum: Burada

Bugüne kadar ne var olmasıdır.

Ben de işe yaramadı Unicode ve CharLowerBuffW kullanmak zorunda.

Bunu nasıl düzeltebilirim?

cevap

3

Microsoft's documentation, CharLowerBuffA'un bu yöntemin ANSI değişkeni olduğunu, ancak Unicode'u belirttiğinizi belirtir.

ANSI kullanarak - CharSet = CharSet.Ansi belirterek - veya Unicode'a ihtiyacınız varsa, CharLowerBuffW ve CharUpperBuffW kullanın. Ayrıca, yöntem iki parametre alır. İkincisin yok.

[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); 

Ve böyle diyoruz: Yani bu deneyin

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

hala çalışmıyorsa, o zaman NatarajC sözü gibi, karakter dizileri kullanmayı deneyin.

+2

CharUpperBuffW aynı sonucu aldı ve unicode'a ihtiyacım var –

+0

Ayrıca, uzunluk parametresini kaçırdığınızı da fark ettim. Cevabımı güncelledim. –

1

Aynı sonuç, hala aynı hata veriyorsa, yöntemi çağırırken string.ToCharArray() öğesini kullanmayı deneyin, imzayı char dizisine değiştirin.

İlgili konular