LMH1 Skrevet 20. mai 2019 Del Skrevet 20. mai 2019 #include <iostream> #include <windows.h> #include <stdio.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hprevInst, LPSTR args, int ncmdshow) { OSVERSIONINFOEX info; ZeroMemory(&info, sizeof(OSVERSIONINFOEX)); info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx((LPOSVERSIONINFO)&info);//info requires typecasting MessageBox(NULL, (LPCSTR) "Windowsversion:"+ info.dwMajorVersion + info.dwMinorVersion, "Winver" + info.dwMajorVersion + info.dwMinorVersion, MB_OK | MB_ICONQUESTION); return 0; // printf("Windows version: %u.%u\n", info.dwMajorVersion, info.dwMinorVersion); } Hvordan får man å fikse størrelsen på dialogboxen og får informasjon om windows versjonen? Om noen vet om koden kan justeres for OSX og Linux støtte ville det være flott. Lenke til kommentar
ahw_ Skrevet 20. mai 2019 Del Skrevet 20. mai 2019 (endret) Hei! Tror du bør lese litt mer om hvordan C (og C++) fungerer. F.eks. i C betyr ikke "abc" + 123 at man setter disse sammen til "abc123". Det betyr at du adderer 123 til en peker (pointer) til "abc" slik at resultatet er en peker til et annet område i minnet og ikke strengen din. Koden din er forresten hovedsakelig skrevet i C, ikke C++. Den er også skrevet direkte mot Windows API-et. Du må bruke de plattform-spesifikke API-ene eller bruke et tredjepartsbibliotek som abstraherer bort dette slik at du koder mot ett API som fungerer på tvers av plattformer. Du kan sikkert få koden din (når du har fikset bugs) til å virke både på macOS og Linux via Wine eller noe men jeg vil anbefale at du heller gjør det ordentlig. Endret 20. mai 2019 av ahw_ 4 Lenke til kommentar
LMH1 Skrevet 20. mai 2019 Forfatter Del Skrevet 20. mai 2019 (endret) Kanskje jeg blander språkene, python og java er mye enklere. Prøver meg på ligdene i linux. Tror du bør gi noen eksempler på hvordan jeg bør gjøre det, er utrolig vanskelig å forstå ting man finner på youtube\forum og generielt. Så er vel lett å se for dyktige utviklere jeg er på bærtur. Hva slags verktøy bør brukes til C++ og C? Codeblock funger dårlig i windows, prøver meg på Dev c++ 5.11 og QT creator, har prøvd meg på Virtual studio og virtual studio code. Men er mye dårlig verktøy for c. #include <iostream> #include <stdio.h> #ifndef DWORD #define WINAPI typedef unsigned long DWORD; typedef short WCHAR; typedef void * HANDLE; #define MAX_PATH PATH_MAX typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned int BOOL; #endif struct utsname { char sysname[]; /* Operating system name (e.g., "Linux") */ char nodename[]; /* Name within "some implementation-defined network" */ char release[]; /* OS release (e.g., "2.6.28") */ char version[]; /* OS version */ char machine[]; /* Hardware identifier */ #ifdef _GNU_SOURCE char domainname[]; /* NIS or YP domain name */ #endif QMessageBox mb(QMessageBox::Question, "Linuxversion" + sysname[] + version[], "Linux-version" + sysname[] + version[], QMessageBox::Ok | QMessageBox::Cancel); if(mb.exec() == QMessageBox::Ok) { do_stuff(); } // printf("Windows version: %u.%u\n", info.dwMajorVersion, info.dwMinorVersion); }; Endret 20. mai 2019 av LMH1 Lenke til kommentar
LMH1 Skrevet 20. mai 2019 Forfatter Del Skrevet 20. mai 2019 Du kan sikkert få koden din (når du har fikset bugs) til å virke både på macOS og Linux via Wine eller noe men jeg vil anbefale at du heller gjør det ordentlig. Tenker du på ligdene: #ifdef _WIN32 //define something for Windows (32-bit and 64-bit, this part is common) #ifdef _WIN64 //define something for Windows (64-bit only) #else //define something for Windows (32-bit only) #endif #elif __APPLE__ #include "TargetConditionals.h" #if TARGET_IPHONE_SIMULATOR // iOS Simulator #elif TARGET_OS_IPHONE // iOS device #elif TARGET_OS_MAC // Other kinds of Mac OS #else # error "Unknown Apple platform" #endif #elif __linux__ // linux #elif __unix__ // all unices not caught above // Unix #elif defined(_POSIX_VERSION) // POSIX #else # error "Unknown compiler" #endif Jobber med ligdene, men først må jeg få det å fungere slik jeg vil. Lenke til kommentar
ahw_ Skrevet 20. mai 2019 Del Skrevet 20. mai 2019 Når jeg koder i C/C++ på Windows så bruker jeg Visual Studio, og på macOS bruker jeg Xcode. Jeg bruker IntelliJ IDEA til Java og Visual Studio Code til alt annet (C og C++ også hvis jeg ikke gidder å starte opp VS). Du kan f.eks. se på IntelliJ CLion som også funker på Linux. Qt Creator er også greit hvis du likevel skal bruke Qt, så unngår du en del arbeid med oppsett. Jeg tenker at du bør starte med den enkleste koden som fungerer først. Få hver ting til å fungere selvstending før du integrerer disse. Hvis du skal kode direkte mot hvert plattform-spesifikke API så kan du regne med å skrive en del kode som over (#ifdef). Dette bør selvsagt gjøres på en ryddig måte. Regner med du blir å ta i bruk diverse tredjepartsbiblioteker etter hvert. Dette er et av marerittene med C/C++ fordi det ikke finnes noen standard verktøy for å håndtere biblioteker. Jeg bruker Conan til dette som fungerer bedre en diverse annet jeg har prøvd, men det finnes mange slike verktøy. Jeg bruker selv vanligvis UI-bibliotekene wxWidgets eller Qt fordi begge har greie verktøy for å lage UI (wxFormBuilder og Qt Designer). Med «Wine» mente jeg dette: https://www.winehq.org/ Wine oversetter API-kall for Windows til f.eks. macOS og Linux så godt som den kan. Har selv et større prosjekt som noen fans overraskende nok fikk til å fungere på macOS med Wineskin, men ikke helt fritt for glitches. Dette er ikke noe du bør satse på. 1 Lenke til kommentar
LMH1 Skrevet 20. mai 2019 Forfatter Del Skrevet 20. mai 2019 (endret) std::string message= "Winver: " + std::to_string(info.dwMajorVersion); std::string tittel = "Windowsversjon:"; MessageBox( NULL, (LPCSTR) message.c_str(), (LPCSTR) tittel.c_str(), Fant ut å endre dette, hjelper det mye bedre. OSVERSIONINFOEX info; ZeroMemory(&info, sizeof(OSVERSIONINFOEX)); info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx((LPOSVERSIONINFO)&info);//info requires typecasting Hvordan får man denne og gi: windows 10 versjon 1809 build 17763.503. Er det snakk om: https://docs.microsoft.com/en-us/windows/desktop/api/winnt/ns-winnt-_osversioninfoexa DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; Endret 20. mai 2019 av LMH1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå