|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2010
Messaggi: 35
|
[C#] Problema GetPrivateProfileString
Ciao a tutti sto programmando una funzione che mi deve leggere il valore di "language" che è "ita" da questo file INI:
Codice:
[config] language = ita version = 2.0 Questa è la classe contenente solo la funzione: Codice:
public class INI_reader { [DllImport("kernel32.dll")] static extern uint GetPrivateProfileString( string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName); public static string ReadKey(string file_path, string Section, string Key) { StringBuilder sb = new StringBuilder(500); uint res = GetPrivateProfileString(Section, Key, "ERROR", sb, sb.Capacity, file_path); return sb.ToString(); } } Mi viene sempre restituito "ERROR" che indica che l'operazione non è andata a buon fine. Sapete dov'è il problema?? Grazie mille in anticipo |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Dec 2005
Città: Provincia di Vicenza
Messaggi: 174
|
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jun 2010
Messaggi: 35
|
sì so era solo per fart capire cosa passo alla funzione!
La funzione la chiamo così: Codice:
lingua = INI.INI_reader.ReadKey(Directory.GetCurrentDirectory() + @"\config\config.conf", "config", "version"); |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Dec 2005
Città: Provincia di Vicenza
Messaggi: 174
|
La funzione "Directory.GetCurrentDirectory()" ritorna la path corrente, ma non è detto che sia quella in cui si trova l'eseguibile.
Se tu crei un collegamento all'eseguibile e nelle proprietà cambi la directory di avvio la funzione "Directory.GetCurrentDirectory()" ritorna la path impostata. Detto questo in debug (da visual studio) la path è "<path del progetto>\bin\debug" (a meno che non sia stata modificata con Directory.SetCurrentDirectory). |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jun 2010
Messaggi: 35
|
La cartella è quella giusta, ho gia verificato con un breakpoint
|
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Dec 2005
Città: Provincia di Vicenza
Messaggi: 174
|
Quote:
Prova a modificare l'import della funzione come segue [DllImport("kernel32.dll", SetLastError=true)] static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName); poi una volta fatta la chiamata prova a verificare il codice d'errore che ha settato la GetPrivateProfileString chiamando: Marshal.GetLastWin32Error() Spero ti possa essere di aiuto. ciao ciao |
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jun 2010
Messaggi: 35
|
Puoi spiegarti meglio che non ho mai usato questa procedura??...grazie mille
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Jun 2010
Messaggi: 35
|
Mi dice che il numero dell'errore è 2!
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Jun 2010
Messaggi: 35
|
Sì, sicursissimo ho provato anche con altri file ma niente
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:01.