kt1117 Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 Mam pytanie. Jak zapisać dll? Jak próbuje skompilować to wyskakują błędy, a skopiowałem kod po prostu z art. na gmclanie i zrobiłem wszystko co tam pisali.
Crackkk-GM Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 A może pokaż kod i treść błędów? o_O
DobryZiom Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 czyli mamy zgadywać... niech zgadne... notatnik nie kompiluje? :D
kt1117 Opublikowano 7 Listopada 2010 Autor Opublikowano 7 Listopada 2010 Kod to: #include<windows.h> #define export extern "C" __declspec(dllexport) export double GMBeep( double a1, double a2 ) { Beep( a1, a2 ); } export char* GMText( void ) { return "Jakis tekst przekazany przez funkcje biblioteki."; } export double GMAdd( double l1, double l2 ) { return l1 + l2; } a błąd: [Linker error] undefined reference to `WinMain@16' ld returned 1 exit status
DobryZiom Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 jak by to powiedzieć... błąd linkowania... jaki projekt utworzyłeś? winapi czy dll? ide dev c++? vc++? czy co innego?
Snake Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 Prawdopodobnie kompilujesz ten kod jako aplikacje Windows/GUI a nie jako DLL. Nie wiem czego używasz jako IDE, ale w opcjach projektu powinno dać się przestawić. Dev C++: http://www.ibm.com/developerworks/webspher.../devcppOpts.gif Code::Blocks: http://www.noquarterarcade.com/system/file...gets_dialog.png (menu "Type" z prawej strony) Albo utwórz nowy projekt z szablonu DLL.
kt1117 Opublikowano 7 Listopada 2010 Autor Opublikowano 7 Listopada 2010 Działa dzięki, trzy razy ustawiałem to głupie linkowanie, ale chyba nie zatwierdzałem czy co a teraz śmiga!
DobryZiom Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 poprostu kompilowałeś na exeka... a kod na dllke :D
kt1117 Opublikowano 7 Listopada 2010 Autor Opublikowano 7 Listopada 2010 To żeby temat nie ostygł zadam jeszcze jedno pytanie :) . Wyczytałem w tutku, że deelką mogę przesłać tylko tekst - char i liczbę - double. Załatwia to sprawę jakiś obliczeń matematycznych, ale czy da się w ten sposób przekazać funkcję np. symulację wciśnięcia klawisza?
DobryZiom Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 mozesz przesłać informacje czy jest wciśnięty :] gm odbiera i już kodem sobie ustawiasz. Nie jest powiedziane że tylko text i cyferki... możesz przesłać wszelkie uchwyty itp przekonwertowane na double a nastepnie wysylac je do dll'i, spowrotem do swojego typu i normalnie na tym działać :]
Muuuuczek567 Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 No cóż, nie znam się za bardzo na C++, ale wydawało mi się, że funkcja z DLL może zwracać też wartość typu boolean. A każdy klawisz na klawiaturze ma swoją reprezentację w kodzie ASCII. Zapewne bardziej napsułem niż pomogłem, ale też się uczę...
kt1117 Opublikowano 7 Listopada 2010 Autor Opublikowano 7 Listopada 2010 To jeszcze ostatnie pytanie. Jak można użyć struktury INPUT, bo jak wpisałem taki kod: INPUT klaw; ZeroMemory(&klaw, sizeof(INPUT)); klaw.type = INPUT_KEYBOARD; klaw.ki.wVk = 0x34; SendInput(1, &klaw, sizeof(INPUT)); wyskoczył mi błąd: 7 E:\Dev-Cpp\dela.cpp `INPUT' does not name a type 8 E:\Dev-Cpp\dela.cpp expected constructor, destructor, or type conversion before '(' token 8 E:\Dev-Cpp\dela.cpp expected `,' or `;' before '(' token 9 E:\Dev-Cpp\dela.cpp expected constructor, destructor, or type conversion before '.' token 9 E:\Dev-Cpp\dela.cpp expected `,' or `;' before '.' token 10 E:\Dev-Cpp\dela.cpp expected constructor, destructor, or type conversion before '.' token 10 E:\Dev-Cpp\dela.cpp expected `,' or `;' before '.' token 11 E:\Dev-Cpp\dela.cpp expected constructor, destructor, or type conversion before '(' token 11 E:\Dev-Cpp\dela.cpp expected `,' or `;' before '(' token
DobryZiom Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 a powiedz mi jedno: dodałeś bibliotekę odpowiedzialną za owe funkcje? :D I ogólnie pokaż kod... jak to opakowałeś
kt1117 Opublikowano 7 Listopada 2010 Autor Opublikowano 7 Listopada 2010 Dołączyłem windows.h ,bo sprawdziłem w msdns i tam było napisane że w tej bibliotece zawarte są te funkcje. Oto kod: #include <string> #include <vector> #include<windows.h> #define export extern "C" __declspec(dllexport) export double GMsym(void) { INPUT klaw; ZeroMemory(&klaw, sizeof(INPUT)); klaw.type = INPUT_KEYBOARD; klaw.ki.wVk = 0x34; SendInput(1, &klaw, sizeof(INPUT)); } export double GMBeep( double a1, double a2 ) { Beep( a1, a2 ); } export char* GMText( void ) { return "Jakis tekst przekazany przez funkcje biblioteki."; } export double GMAdd( double l1, double l2 ) { return l1 + l2; }
programista Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 Z tego co pamiętam windows.h to plik nagłówkowy, a nie biblioteka...
kt1117 Opublikowano 7 Listopada 2010 Autor Opublikowano 7 Listopada 2010 A jaka jest nazwa biblioteki?
DobryZiom Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 windows.h chyba nie wystarczy... kiedyś pisałem coś takiego... nie pamiętam biblioteki... poszukaj :]
programista Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 Nie pamiętam jaka nazwa bo ostatni raz odpalałem kompilator 2 lata temu. Generalnie biblioteki mają rozszerzenie: .lib, z tego co widzę błąd wywala Ci linker więc najprawdopodobniej nie dodałeś biblioteki w opcjach projektu... P.S. Aha jak korzystasz z dev-cpp czy code::blocks to rozszerzenie będzie .a czy coś takiego.
DobryZiom Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 biblioteki mają rozszerzenie dll... liby mają format .lib...
DobryZiom Opublikowano 7 Listopada 2010 Opublikowano 7 Listopada 2010 no tak... to jest biblioteka... tyle że głownie linkuje funkcje z biblioteki dll...
kt1117 Opublikowano 12 Listopada 2010 Autor Opublikowano 12 Listopada 2010 Nie wiem czemu, ale znalazłem w msdns funkcją input i tam było napisane że biblioteka to user32.lib więc znalazłem sobie tą bibliotekę i podłączyłem towszystko tak: a i tak nie działa.
DobryZiom Opublikowano 12 Listopada 2010 Opublikowano 12 Listopada 2010 fajnie... dodałeś lib... ale include to jest? ^^
MagnusArias Opublikowano 12 Listopada 2010 Opublikowano 12 Listopada 2010 #include <windows.h> #include <windowsx.h> Te dwie biblioteki.
DobryZiom Opublikowano 12 Listopada 2010 Opublikowano 12 Listopada 2010 zapodaj cały projekt( spakuj do rar czy tam zip i dawaj :D )
DobryZiom Opublikowano 12 Listopada 2010 Opublikowano 12 Listopada 2010 loool... cały projekt - plik projektu, pliki *.cpp, *.h itp... wszystko...
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ę