Skocz do zawartości

Dll


Rekomendowane odpowiedzi

Opublikowano

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.

Opublikowano

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

Opublikowano

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.

Opublikowano

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?

Opublikowano

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ć :]

Opublikowano

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ę...

Opublikowano

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

Opublikowano

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;
}

Opublikowano

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.

Opublikowano

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:

blad.jpg

a i tak nie działa.

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...