Skocz do zawartości

Dll


kt1117

Rekomendowane odpowiedzi

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

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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?

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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