2015-10-05 3 views
0

я сделал длл в C# framework.net 2.0 с этим кодом:GetPrivateProfileString не работает, если путь содержит специальные символы

/// <summary> 
/// Read Data Value From the Ini File 
/// </summary> 
/// <PARAM name="Section"></PARAM> 
/// <PARAM name="Key"></PARAM> 
/// <PARAM name="Path"></PARAM> 
/// <returns></returns> 
public string IniReadValue(string Section, string Key) 
{ 
    StringBuilder temp = new StringBuilder(255); 
    int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path); 
    return temp.ToString(); 
} 

функция объявлена ​​как это:

[DllImport("kernel32")] 
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); 

и если Я создаю проект winform, который вызывает этот код, работает отлично, также если файл ini находится внутри папки документов, а пользователь имеет специальный символ, например ç или Д.

это длл мне нужно использовать в Unity3D, и работает нормально, но если папка содержит специальные символы выше (пример) он не работает и возвращает пустую строку ..

какие-либо идеи?

+0

Как вы объявляете эту функцию? –

+0

@RezaAghaei добавил объявление в вопрос :) – ghiboz

+1

Вам действительно нужна эта функция? Это старый, устаревший вызов функции (http://stackoverflow.com/questions/7336185/what-is-the-purpose-of-getprivateprofilestring), почему вы не читаете ini вручную? – Skyblade

ответ

2

Использование CharSet=CharSet.Unicode:

[DllImport("kernel32", CharSet=CharSet.Unicode)] 
private static extern int GetPrivateProfileString(string section, 
      string key, string def, StringBuilder retVal, 
      int size, string filePath); 
Смежные вопросы