Skocz do zawartości

Skovvi

Zbanowani
  • Postów

    32
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Skovvi

  1. Heh...kiedyś ściągnąłem vc++ ale nie mogłem się połapać :P Ale sobie ściągam :P I nauczę się obsługi xD Będę Hardcorem! xD 3. CYTAT funkcja char* WczytajZmiennaINI( char* Sekcja, char* Klucz, char* Sciezka, char* brak ) { CHAR wartosc[256]; GetPrivateProfileString(Sekcja,Klucz,brak,wartosc,256,Sciezka); return wartosc; } Wywali błąd, przynajmniej powinno, ba nawet musi. "CHAR wartosc[256];" musi być zadeklarowane jako zmienna statyczna czyli nie zostanie usunięta po wyściu z pamięci (co bez słowa static właśnie robi), a każde nowe odwołanie do funkcji będzie dawało dostęp do tej zmiennej statycznej którą już raz używaliśmy (dla tego statyczna aby dane zmiennej były pod tym samym adresem w pamięci (dostęp do nich był odblokowany)) Więc co radzisz? xD w dev c++ działa xD za to go lubię xD
  2. Ale Dev C++ w sumie od kilku lat nie aktualizowane xD Troche xD
  3. Witam.Ten art będzie będzie o pisaniu i wczytywaniu do GM'a DLLi w C++. Wiem że na tej stronie jest już taki art(sam się z niego uczyłem) ale troche osób miało problem ze zrozumieniem(np: CTRL). Postaram się go napisać jak najprościej WSTĘP: Ehh...to wyżej xD. Może nie opisze tego fachowo ale chyba nawet lepiej CO POTRZEBA: 1.Jakiś kompilator( ja używam Dev c++ i Code::Blocks[to są IDE ale mają w sobie kompilatory] i psyś kazał napisać że Visual C++ więc...polecam xD) 2.Game Maker7,8 PRO lub 6.1 C++: I.Tworzenie projektu 1.Uruchamiamy Dev c++(na nim będę pokazywał ) 2.Klikamy Plik->Nowy->Projekt 3.Pokazuje się okienko W dziale Basic jest "DLL". Zaznaczamy. 4.Poniżej ustawiamy nazwę projektu, np:"IniDLL"(bo taki dll cobie napiszemy ) II.Przygotowanie Klikamy 2 razy na "dllmain.cpp"(z lewej strony jest rubryka naszego projektu), następnie kasujemy cały jego kod . No i mamy pusto III.Piszemy! Najpierw wpisujemy używane biblioteki: #include <windows.h> My użyjemy tylko windows.h :] Następnie definicja funkcji(aby działało nam pod GM): #define funkcja extern "C" __declspec(dllexport) funkcja to nazwa do wywołania ;] każda funkcja będzie się więc zaczynała funkcja... No i teraz zabieramy się za funkcje dlla! Budowa funkcj: funkcja zwracana nazwa_funkcji ( argumenty ) { funkcja return zwracana } I to tylko tyle zwracana może być char* lub double(poprawione :P pomyłka :P) :]. Argumenty to dostarczane do dlla info :] np: char* Imie, int Wiek. Troche zagmatfane? chyba nie xD Jedziemy dalej 1 funkcja będzie nam zapisywać dane do ini: funkcja double ZapiszINI( char* Sekcja, char* Klucz, char* DoZapisu, char* Sciezka ) { WritePrivateProfileString(Sekcja,Klucz,DoZapisu,Sciezka); return 1; } i teraz małe tłumaczenie: funkcja nazywa sie ZapiszINI, zwraca liczbe 1, pobiera argumenty char* Sekcja, Klucz, DoZapisu(czyli text czy liczba...przy zapisie to nie ważne ) i Sciezka ... chwila...podłoże do pieca ... ok. Jestem xD ... 2 funkcja Wczytuje nam zmienną z ini funkcja char* WczytajZmiennaINI( char* Sekcja, char* Klucz, char* Sciezka, char* brak ) { static CHAR wartosc[256];//tu byl blad...czuje się podle!!! xD GetPrivateProfileString(Sekcja,Klucz,brak,wartosc,256,Sciezka); return wartosc; } Nie wiem czy ktoś zauważył że teraz zwraca char wartosc. Tą wartość ustala się w dllku bo ją pobieramy No i 3 funkcja: funkcja double WczytajLiczbeINI( char* Sekcja, char* Klucz, char* Sciezka, double brak ) { return GetPrivateProfileInt(Sekcja,Klucz,brak,Sciezka); } tym razem znowu zwraca liczbę ale: w 4 argumencie pobiera int, czyli liczbe ;] jest ona po to by przy braku ini wpisywać inną wartość :] Taka liczba awaryjna xD No...to dll napisany Jego treść: #include <windows.h> #define funkcja extern "C" __declspec(dllexport) funkcja double ZapiszINI( char* Sekcja, char* Klucz, char* DoZapisu, char* Sciezka ) { WritePrivateProfileString(Sekcja,Klucz,DoZapisu,Sciezka); return 1; } funkcja char* WczytajZmiennaINI( char* Sekcja, char* Klucz, char* Sciezka, char* brak ) { static CHAR wartosc[256]; GetPrivateProfileString(Sekcja,Klucz,brak,wartosc,256,Sciezka); return wartosc; } funkcja double WczytajLiczbeINI( char* Sekcja, char* Klucz, char* Sciezka, double brak ) { return GetPrivateProfileInt(Sekcja,Klucz,brak,Sciezka); } naciśnij F9 i się skompiluje ;D GML: Tworzymy sobie nowy skrypt, np: "MojZajeKur_abistyDLL_Init" i w nim kod: GML global.ZapiszINI=external_define("dll.dll","ZapiszINI",dll_stdcall,ty_real,4,ty_string,ty_string,ty_string,ty_string) global.WczytajZmiennaINI=external_define("dll.dll","WczytajZmiennaINI",dll_stdcall,ty_string,4,ty_string,ty_string,ty_string,ty_string) global.WczytajLiczbeINI=external_define("dll.dll","WczytajLiczbeINI",dll_stdcall,ty_real,4,ty_string,ty_string,ty_string,ty_real) objaśnienie: funkcja external_define wczytuje funkcje z dlla :] i teraz argumenty: GML external_define(nazwa dlla("dll.dll"),nazwa funkcji("moja super funkcja"),typ odwołania(zawsze wal dll_stdcall xD),zwracana(ty_real albo ty_string),ilość argumentów,typy argumentów(ty_real albo ty_string)) ;D i tyle ;p Mamu zdefiniowane :P Teraz zwalnianie. Nowy skrypt np:"MojZajeKur_abistyDLL_Free" GML external_free("SynthiaINI.dll") tu poprostu nazwa dlla ;D nie ma co opisywać xD no i używanie funkcji! xD I love this!!! Będziemy tworzyli dla każdej funkcji inny skrypt ;] skrypt do funkcji zapisu np:"INI_Zapisz": GML external_call( global.ZapiszINI, argument0, argument1, argument2, argument3 ) czyli: external_call(zmienna zdefiniowanej funkcji i argumenty do uzupelnienia ;D i jeszcze 2 funkcje :] czytaj zmienna: GML external_call( global.WczytajZmiennaINI, argument0, argument1, argument2, argument3 ) i czytaj real GML external_call( global.WczytajZmiennaINI, argument0, argument1, argument2, argument3 ) i tyle i teraz tworzymy objekt i w create skrypt MojZajeKur_abistyDLL_Init(), w game_end MojZajeKur_abistyDLL_Free() i i juz uzywa dlla i zwalnia przy wylaczeniu gry! WooW xD To teraz jeszcze używanie: ...chwila...napije się... ...już... ok... Więc: np po kliknięciu klawisza spacji zapisze nam się coś ;] GML sekcja=get_string("Sekcja","naszasekcja") klucz=get_string("klucz","klucz") klucz2=get_string("klucz2","klucz2") zmienna=get_string("zmienna","co kurna bolek?!") sciezka=get_string("Sciezka","C://plik.ini") wiek=17 skrypt_zapisz(sekcja,klucz,zmienna,sciezka) skrypt_zapisz(sekcja,klucz2,wiek,sciezka) zapisujemy sobie jakas zmienna i jakas liczbe ;D teraz np po kliknieciu entera sie wczytuje ;D GML sekcja=get_string("Sekcja","naszasekcja") klucz=get_string("klucz","klucz") klucz2=get_string("klucz2","klucz") sciezka=get_string("Sciezka","C://plik.ini") ini1=skrypt_wczytaj_zmienna(sekcja,klucz,sciezka,"Brak Klucza") ini2=skrypt_wczytaj_liczbe(sekcja,klucz2,sciezka,"Brak Klucza") i wszystko juz powinno działać :] I to "Sysko" w tym arcie EDIT: Przepraszam za kilka błedów. Czuje sie podle! naprawde...me serce krwawi! xD BY Skovv
  4. c++. I znam gml...tylko nie znałem tych 2 funkcji ;D No heh...więc temat do zamknięcia :]
  5. Key pressed?? i to dziala w innych programach? I po co ja się męczyłem? :/ Ehh...
  6. Witam. Pisze sobie taki mini silniczek do GM'a: "Synthia". I stwierdziłem że może Wam się spodobać jedna z jego części a mianowicie "Simulation". Dzięki niej można symulować naciśnięcia klawiszy.Niby nic ale jest to dosyć przydatne :] Poniżej daje dll, gex oraz 2 przykłady użycia :] wystarczy zmienić objekty w roomie Synthia Simulation Download *Nie wejdzie pod wersje starszą niż GM7* Proszę o komentarze. E:W obj Synthia_Simulation zamieńcie kod SS_Uruchom_Aplikacje("AplikacjaTestowa.exe") na execute_shell("AplikacjaTestowa.exe",0) bo z niewiadomych przyczyn nie działa(niedawno działała :/ Coś może u mnie)
×
×
  • Dodaj nową pozycję...