Skocz do zawartości

Jak sie robi dll'e?


Easeful

Rekomendowane odpowiedzi

o to mi chodziło thx :)

 

 

edit:

 

ale nie mogę skompilować bo error wyskakuje :(

 

 

e2: bo ja daje w Dev'ie Nowy Projekt --> DLL i on już sam sobie jakąś zupełnie inną strukture wpisuje w to na dzień dobry

 

e3: dobra już działa, ale gm teraz pisze że error defining functions

Odnośnik do komentarza
Udostępnij na innych stronach

Michaś, sypnij kodem tutaj lub mi na PM a wyjaśnię Ci w czym problem

Odnośnik do komentarza
Udostępnij na innych stronach

Ok.

 

No to tak:

 

Daję Dev C++ --> Nowy Projekt --> DLL

Tworzą mi się automatycznie dwa pliki, które mają już jakąś treść:

 

 

dllmain.cpp

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>

DllClass::DllClass()
{

}


DllClass::~DllClass ()
{

}


BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

 

 

 

dll.h

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


class DLLIMPORT DllClass
{
  public:
    DllClass();
    virtual ~DllClass(void);

  private:

};


#endif /* _DLL_H_ */

 

 

Ja zrobiłem tak, że z dll.h wywaliłem wszystko i dałem to Tymona, czyli:

 

 

dll.h

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

 

Ale przy kompilacji wyskoczył error na linijce #include "dll.h"

Sie wkurzyłem i usunąłem wszystko.

 

Potem od nowa robiłem ale nie wywalałem tego z dll.h, tylko skompilowałem

to co mi od początku kompilator dał. No i sie skompilowało.

No i wtedy dałem do tego dll.h dopiero po kompilacji ten kod tymona.

Podejrzewam, że mimo to że napisało Done to i tak sie nie skompilowało bo potem dałem w gm, create obiektu:

GML
GMBeep = external_define( 'dll.dll', 'GMBeep', dll_stdcall, ty_real, 2, ty_real, ty_real );

GMText = external_define( 'dll.dll', 'GMText', dll_stdcall, ty_string, 0 );

GMAdd = external_define( 'dll.dll', 'GMAdd', dll_stdcall, ty_real, 2, ty_real, ty_real );

 

show_message( external_call( GMText ) );

show_message( 'Suma 1111 i 7777 to ' + string( external_call( GMAdd, 1111, 7777 ) ) );

 

show_message( 'Beep!' );

external_call( GMBeep, 1000, 1000 );

 

external_free( 'dll.dll' );

 

 

No i error w gm.

 

 

Chyba wszystko to źle od początku robie, nie? Gdzie ja mam ten kod co tymon dał w tym kursie wrzucić?

Odnośnik do komentarza
Udostępnij na innych stronach

Przerażasz mnie.

Daj pusty (empty) projekt i potem w opcjach projektu zrób to:

beztytuupk.jpg

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