Co się tyczy programu, który przesłałeś mi na e-mail to mógłbym mu wiele zarzucić, np. to że powtarzasz bloki kodu, np. funkcja pobierająca informacje o wersji systemu
(SystemInfo()) występuj w jednostce Unit1.cpp i Unit3.cpp, a przecież wystarczy ją raz zdefiniować i używać wielokrotnie. W takim celu najlepiej stworzyć jeden plik
(moduł) zawierający wiele powtarzających się funkcji i dołączać go do wszystkich jednostek, które potrzebują funkcji w nim zawartych. Proponuję byś zapoznał się
w serwisie Cyfrowy
Baron z poradą:
teoria tworzenie modułów.Twój program skompilował się u mnie bez problemu, więc błędów jako takich nie zawiera, jednak w zdarzeniu
OnShow dla formularza
Form1 (Unit1) wczytujesz plik z określonej lokalizacji, jednak gdy tego pliku nie ma to program zgłasza błąd. Powinieneś sprawdzać czy taki plik istnieje, bo jeżeli plik nie istnieje, to wykonywanie dalszych operacji nie ma sensu:
void __fastcall TForm1::FormShow(TObject *Sender)
{
wersja = GetFileVersionInfo(NULL, "FileVersion");
fileName = ExtractFilePath(ParamStr(0)) + "settings.ini";
if(!FileExists(fileName))
{
Timer1->Enabled = true;
ShowMessage("Zainstaluj Ventillo");
return; // <-- tutaj przerywam wykonywanie dalszych operacji
}
/* blok else staje się zbędny, dalszy kod może być poza tym blokiem */
//...
Co się tyczy Twojego problemu, to oczywiście kod, który przytoczyłeś w swoim ostatnim poście u mnie działa bezbłędnie, nie naniosłeś jednak tych poprawek do swojego programu.
Drobna uwaga odnośnie definicji:
#define INFO_BUFFER_SIZE 32767
takich definicji nie umieszcza się wewnątrz funkcji, gdyż tracą na swoim znaczeniu. takie zmienne definiujesz gdzieś na początku pliku źródłowego, np:
#pragma resource "*.dfm"
#define INFO_BUFFER_SIZE 32767
TForm1 *Form1;
dzięki temu są dostępne dla wszystkich funkcji.
W przytoczonym przez Ciebie przykładzie można po prostu zrezygnować z definicji i wpisać rozmiar jawnie, jeżeli nie potrzebujesz tego rozmiaru nigdzie więcej, czyli:
TCHAR nazwausera[32767];
DWORD size = 32767;