Skocz do zawartości

GCC i Rejestr


Talisman

Recommended Posts

Jak powszechnie wiedomo Dev-C++ wykożystuje wieloplatformowy GCC.
Tak więc moje pytanie dotyczy GCC i Rejestru Windows.
Ale do rzeczy:
...jest taki kod:

 HKEY k;
char regpath[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
char valname[]="Program";
char source[]="C:\\Program.exe";

RegOpenKeyEx(HKEY_LOCAL_MACHINE, regpath, 0, KEY_WRITE, &k);
RegSetValueEx(k, valname, 0, REG_SZ, source, lstrlen(source)+1);
RegCloseKey(k);

...i wyskakuje taki błąd:

55  |  C:\main.cpp  |   invalid conversion from `char*' to `const BYTE*'   |

...a kod jest na bank poprawny, bo w BCB mi sie bez problemu kompiluje....jednak zależy mi bardzo żeby było to w GCC tzn. w Dev-C++
Aha....mam versje 4.9.8.0...
Pozdro... ;)

Link do komentarza
Udostępnij na innych stronach

pinolec napisał:
Prawdopodobnie wystarczy wstawić jawną konwersje i bedzie sie kompilowalo. Jak nie bedziesz wiedzal jak to daj znac. Napisz wtedy linie ktora wywala blad.

powodzenia

Nie, raczej nie o to chodzi...:(
Tu masz linie z błędem...:

RegSetValueEx(k, valname, 0, REG_SZ, source, lstrlen(source)+1); 

...zaznaczam, że błędów w tym kodzie jakotakich nie ma, gdyż jak już wspomniałem, kod się kompiluje pod BCB.

Pozdrawiam... ;)

Link do komentarza
Udostępnij na innych stronach

guest napisał:
RegSetValueEx(k, valname, 0, REG_SZ, source, lstrlen(source)+1); 

Wlasnie o to tu chodzi. Kompilator BCB jest mnie restrykcyjny i dokonuje konwersji niejawnej. GCC jest bardziej restrykcyjny i nie pasuja mu te typy. Przedostatni argument f. jest u Ciebie typu char* a powinien byc zgodnie z dokumentacja typu CONST BYTE *

Sprobuj dodac rzutowanie (CONST BYTE *)source a powinno pojsc.

powodzenia

Link do komentarza
Udostępnij na innych stronach

Generalnie w C stosuje sie rzutowanie za pomocą nawiasow przed nazwa zniennej ktora chcemy rzutować

np

int a, b, c;

a = (long)b + (long)c;

oczywiscie to tylko przyklad i nie ma sensu konwersja inta do longa gdy w rezultacie i tak zapiszemy do inta.

W CPP stosuje sie static_cast i dynamic_cast. Wiecej o rzutowaniu w CPP poczytasz tu
https://www.intercon.pl/~sektor/cbx/appendix/casting.html Przegladnij tez reszte strony https://www.intercon.pl/~sektor/

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...