KozakPL Opublikowano 11 Lipca 2009 Udostępnij Opublikowano 11 Lipca 2009 Siema xD Tęskniliście? xD Mam pytanko.Piszę takiego MiniDLL'ka i mam problem: oto kod: #include<windows.h> #include"main.h" #define export extern "C" __declspec(dllexport) export char* Tworz( char* Sciezka) { CreateFile( Sciezka, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); } i tradycyjnie błąd: main.c||undefined reference to `WinMain@16'| ||=== Build finished: 1 errors, 0 warnings ===| Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 11 Lipca 2009 Udostępnij Opublikowano 11 Lipca 2009 zmień opcje kompilacji z aplikacji (EXE) na biblioteke dynamiczną (DLL) -.- extern "C" __declspec(dllexport) pamiętaj, nie sugeruj się tym, że ta linijka zrobi to za Ciebie, bo to jest zwykłe dodanie nazwy funkcji do tablicy exportu, po to aby z zewnątrz można było pobrać wskaźnik na funkcję. Swoją drogą, zlituj się nad nami i przeczytaj to: http://darkcult.gamedev.pl/kursy/apidll.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KozakPL Opublikowano 11 Lipca 2009 Autor Udostępnij Opublikowano 11 Lipca 2009 aaaaaaaa no tak...na początku się wybiera...dziex Psysiu :) EDIT: Jeszcze 1 pytanko xD czemu wylatuje błąd? GML T = external_define( 'TworzDLL.dll', 'Tworz', dll_stdcall, ty_string, 1, ty_string); external_call( T, "C:\Documents and Settings\Skovv\Pulpit\dupa.txt" ); external_free( 'TworzDLL.dll' ); i błąd w okienku windowa: Unexpected error occured when running the game Coś z dllem czy gml? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 11 Lipca 2009 Udostępnij Opublikowano 11 Lipca 2009 Zamiast "\" pisz "/" lub "\\" bo ten znak pojedynczo oznacza znak specjalny do interpretowania z następna literą np "\n" oznacza nową linie. Rozumiesz? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KozakPL Opublikowano 11 Lipca 2009 Autor Udostępnij Opublikowano 11 Lipca 2009 rozumiem ;p Dziex :) E: Ale nadal nie działa ;/ GML T = external_define( 'TworzDLL.dll', 'Tworz', dll_stdcall, ty_string, 1, ty_string); external_call( T, "C:/Documents and Settings/Skovv/Pulpit/dupa.txt" ); external_free( 'TworzDLL.dll' ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 11 Lipca 2009 Udostępnij Opublikowano 11 Lipca 2009 Na sucho nic nie pomogę. Podeslij mi projekt źródła dlla i gm na pm a jutro rano Ci naprawie bo teraz jestem na fonie. Swoją drogą ściągnij sobie visual c++ i odpalaj dllke debugowana i powinno wywalic jaki błąd. Ale i tak w sumie nie będziesz wiedział co z tym zrobić więc najwyżej podasz tutaj treść błędu. Albo jak mówiłem, podeslij mi pliki a jutro pomogę EDIT: Masz wać swoje kody: #include <stdio.h> #define export extern "C" __declspec(dllexport) export double Kwadrat(double liczba) { return liczba*liczba; } export double Tworz( char* Sciezka) // nie zwracaj cholernego char* jesli nie ma takiej koniecznosci, bo z nim GM ma problemy, swoja droga funkcja powinna ZAWSZE cos zwracac a twoja nic nie zwracala. { // mozna prosciej i bez bledow, po wiecej zapraszam tu: http://www.cplusplus.com/reference/clibrary/cstdio/fopen/ FILE* file; // wskaznik na obiekt pliku file=fopen(Sciezka,"w"); // fopen otwiera plik o nazwie Sciezka, w trybie zapisu ("w"), a jesli taki plik nie istnieje to zostaje utworzony. funkcja zwraca wskaznik na obiekt pliku. if(file==NULL)return(false); // jesli zwrocony wskaznik bedzie rowny NULL to znaczy ze nie otworzyl / utworzyl pliku i konczy funkcje zwracajac false fclose(file); // po utworzeniu pliku musimy z niego wyjsc return(true); // zwracamy true poniewaz utworzenie pliku powiodlo sie } // i najwazniejsze: // OLEJ DEVC++ JAK NAJSZYBCIEJ I PRZERZUC SIE NA INNE LEPSZE IDE, // KTORE POZWOLI CI PORZADNIE DEBUGOWAC PROJEKT, // INACZEJ BEDA PROBLEMY ZE ZNALEZENIEM PRZYCZYNY BLEDU. // NAJLEPIEJ WYBIERZ VISUAL C++, SKORO I TAK PISZESZ TYLKO POD WINDOWS GML zTworz = external_define( 'Kozak.dll', 'Tworz', dll_stdcall, ty_real, 1, ty_string ) // zwracamy real a nie string, bo na jaka cholere byl ci potrzebny to nie wiadomo Sciezka = "lol.txt" external_call( zTworz, Sciezka ) external_free( 'Kozak.dll' ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KozakPL Opublikowano 12 Lipca 2009 Autor Udostępnij Opublikowano 12 Lipca 2009 ok działa :) Dziex...ale czemu double a nie char? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Lipca 2009 Udostępnij Opublikowano 12 Lipca 2009 Odpowiednikiem real jest double, a string jest char*. Gdy zwracasz liczbę to jako double, a nie char*. Inaczej było by to nie logiczne. I nawet napisałem w komentarzu czemu tak. Tylko mi nie mów że nie czytałes... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KozakPL Opublikowano 12 Lipca 2009 Autor Udostępnij Opublikowano 12 Lipca 2009 czytałem...ale nadal nie rozumiem ;/ Przecież Sciezka to będzie string bo "lol.txt" a nie np: 5 ;/ w arcie jest np tak: export char* GMText( void ) czyli to przez to ze nie ma żadnej funkcji?Jak by było np zamiast void "char* lol" to wtedy było by tak: export double GMText( char* lol ) ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Lipca 2009 Udostępnij Opublikowano 12 Lipca 2009 O kurfa :0 double jest bo zwraca liczbę a nie tekst Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KozakPL Opublikowano 12 Lipca 2009 Autor Udostępnij Opublikowano 12 Lipca 2009 Aha xD już rozumiem xD o kurfa już rozumiem xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się