Skocz do zawartości

Mini DLL


KozakPL

Rekomendowane odpowiedzi

Siema.Mam problem.Pisze swój 1 DLL i jego treść to:

#include<windows.h>

#define export extern "C" __declspec(dllexport)

//Dzwiek
export double Dzwiek( double dz1, double dz2 )
{
     Beep( dz1, dz2 );
}

//Obliczenia
export double Dod( double d1, doubled2 )
{
return d1 + d2;
}
export double Ode( double o1, double o2 )
{
return o1 - o2;
}
export double Mno( double m1, double m2 )
{
return m1 * m2;
}
export double Dzi( double dz1, double dz2 )
{
return dz1 / dz2;
}

 

a Błąd:

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

DLLIMPORT void HelloWorld ()
{
    MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}


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

 

Proszę o pomoc :D

 

edit: Na dole są błędy,od góry:

 

Line2:In file included from dllmain.c
Line6:syntax error before string constant
Line7:syntax error before "void"
[Build Error] [dllmain.o] Error 1

Odnośnik do komentarza
Udostępnij na innych stronach

Umiesz czytać?Zamiast "dll.h" masz wpisać nazwe TWOJEGO nagłówka.Na przykład:

#ifndef __MAIN_H__
#define __MAIN_H__

#include <windows.h>

/*  To use this exported function of dll, include this header
*  in your project.
*/

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif


#ifdef __cplusplus
extern "C"
{
#endif

void DLL_EXPORT SomeFunction(const LPCSTR sometext);// tutaj masz wpisać Twoje funkcje

#ifdef __cplusplus
}
#endif

#endif // __MAIN_H__

Odnośnik do komentarza
Udostępnij na innych stronach

Ja mam taki kod w main.cpp:

#include "main.h"

// a sample exported function
void DLL_EXPORT SomeFunction(const LPCSTR sometext)
{
    MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // attach to process
            // return FALSE to fail DLL load
            break;

        case DLL_PROCESS_DETACH:
            // detach from process
            break;

        case DLL_THREAD_ATTACH:
            // attach to thread
            break;

        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}

i ten co podałem.U mnie działa.

EDIT:Każdy kompilator ma chyba inne kody.Więc daj swój kod i w main.h w nagłowku daj zamiast "dll.h" daj "main.h"

Odnośnik do komentarza
Udostępnij na innych stronach

A mi ten kod nie działa xD ten co podał 47xxxxxxxx działa xD Ale nowy problem:

 

Nazwa dll'a to: Kalkulator.dll i jest on w tym samym folderze co plik Programu(Gama Maker File).W Create oKalkulator dałem kod

GML
/*Wczytaj Funkcje DLL*/

zDzwiek = external_define( 'Kalkulator.dll', 'Dzwiek', dll_stdcall, ty_real, 2, ty_real, ty_real );

zDod = external_define( 'Kalkulator.dll', 'Dod', dll_stdcall, ty_real, 2, ty_real, ty_real );

zOde = external_define( 'Kalkulator.dll', 'Ode', dll_stdcall, ty_real, 2, ty_real, ty_real );

zMno = external_define( 'Kalkulator.dll', 'Mno', dll_stdcall, ty_real, 2, ty_real, ty_real );

zDzi = external_define( 'Kalkulator.dll', 'Dzi', dll_stdcall, ty_real, 2, ty_real, ty_real );

 

external_free( 'Kalkulator.dll' );

 

i dostaje(chyba gratis od firmy) błąd:

ERROR in
action number 1
of Create Event
for object oKalkulator:

Error defining an external function.

Urzywam Dev C++ 4.9.9.2

Odnośnik do komentarza
Udostępnij na innych stronach

<offtop>Lepiej nie używaj Dev - C++ bo już od miliardów lat nie jest updatowany.Ostatnia akcja w Dev - C++ była w 2005 roku...Dlatego używaj Code::Blocks.</offtop>

<top>Trudno zrobić DLLa dla GMa.Bo GM jest napisany w Delphi, a nie w C++.Najlepiej zapytaj się na Game Maker Community jak trzeba robić DLLe w C++ dla GMa.</top>

Odnośnik do komentarza
Udostępnij na innych stronach

<offtop>Lepiej nie używaj Dev - C++ bo już od miliardów lat nie jest updatowany.Ostatnia akcja w Dev - C++ była w 2005 roku...Dlatego używaj Code::Blocks.</offtop>

<top>Trudno zrobić DLLa dla GMa.Bo GM jest napisany w Delphi, a nie w C++.Najlepiej zapytaj się na Game Maker Community jak trzeba robić DLLe w C++ dla GMa.</top>

A myślałeś o tym, że to nie robi różnicy w czym jest napisany DLL ?

Polecam MSVC++ a co do tworzenia DLLi pod GMa:

https://gmclan.org/index.php?czytajart=36

Odnośnik do komentarza
Udostępnij na innych stronach

kod którego rządasz jest w tym arcie z którego się rzekomo uczysz

Odnośnik do komentarza
Udostępnij na innych stronach

wiem...ale nie rozumiesz...ty podałeś coś takiego:

   export char* GMText( void )
   {
        return "Jakis tekst przekazany przez funkcje biblioteki.";
   }

A ja bym chciał zerknąć na coś bardziej rozbudowanego typu

export char* GMText( char* a1, double a2 )
{
     return "bla bla" + a1
     return "blaasdfs" + a2 
     //itp
}

Albo coś podobnego

 

E:Sry...To art Tymona ;]

Odnośnik do komentarza
Udostępnij na innych stronach

naucz się pierw programować cokolwiek logicznego w cpp a potem bierz się za to.

Odnośnik do komentarza
Udostępnij na innych stronach

naucz się pierw programować cokolwiek logicznego w cpp

programować cokolwiek logicznego

logicznego

!!

Odnośnik do komentarza
Udostępnij na innych stronach

u Ciebie ewidentnie brak jakiej kolwiek logiki, nie znasz żadnych zasad pisania w surowym cpp, od niego zacznij

Odnośnik do komentarza
Udostępnij na innych stronach

wow, odpalić szablon konsoli z deva to i ja potrafie, Ty mi teraz opisz co każda linia robi

Odnośnik do komentarza
Udostępnij na innych stronach

#include <iostream>//klawiatura (chyba;p )

using namespace std;// ?
int main()//glowna funkcja
{
int liczba = 0;
cout << "Podaj pierwsza liczbe\n";
cin >> liczba;
cout << "Wybrales liczbe:";
cout << liczba;

int liczba2 = 0;//liczba druga
cout << "\nPodaj druga liczbe\n";//wiadomosc
cin >> liczba2;//pytamy się o drugą liczba
cout << "Wybrałes liczbe:";//pokazujemy 
cout << liczba2 << "\n";//wyswietlamy wiadomosc

int wybor;//zmienna wybor

cout << "Co zrobic?\n1 - Dodaj\n2 - Odejmij\n3 - Pomnoz\n4 - Podziel\n";//tekst
cin >> wybor;//pytamy sie o wybor

switch (wybor)
{
case 1:cout << "Wynik:" << liczba+liczba2;break;wyswietlemy wynik dodawnia
case 2:cout << "Wynik:" << liczba-liczba2;break;//odejmowania
case 3:cout << "Wynik:" << liczba*liczba2;break;//mnozenia
case 4:cout << "Wynik:" << liczba/liczba2;break;//dzielenia
default:cout << "Wybierz:#Dodaj#Odejmij#Pomnóz#Podziel, inaczej nic sie nie stanie";//wyswietlamy tekst
}
int wyjsc;//tworzymy zmienna wyjscie
cout << "\nWyjsc z programu?\n1 - Tak\n2 - Nie\n";//wyswietlamy wiadomosc 
cin >> wyjsc;//pytamy o wyjscie
switch (wyjsc)
{
case 1: return 0;break;//the end
case 2: printf("\n\n\n\n\n");main();break;//jesli wybierzemy 2 to piszemy pięć enterów i włączamy funkcje main robiąc pętle
}
}

Mój pierwszy program w C++ :) Masz się poucz ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Spox tylko mi zaraz nie powiedz że tyle to w necie pisze...

 

Linia1: dyrektywa preprocesowa(tak pisze w książce[musiałem zajrzeć bo przyznam że nie wiedziałem jak to sie zwie xD])

Linia2: funkcja główna

Linia3: otwarcie programu

Linia4: funkcja wyświetlająca(w stdio bo w iostream jest cout ;p)

Linia5: czeka na dowolny klawisz

Linia6: zwraca wartość 0 do systemu

Linia7: zamyka program

 

 

Kiedyś się tego uczyłem ale zwykłego c++

 

 

Edit:Dziex 47xx...xx ale myślałem o DLL(che ogarnąć jak wygląda taki dll który coś robi[bo ten który jest TU to tylko wyświetla napis]) xD Ale dziex za starania ^^ Nawet Komentarze dodałeś ^^

Odnośnik do komentarza
Udostępnij na innych stronach

Lol masz:

Main.cpp:

#include<math.h>
#define _export extern "C" __declspec( dllexport )
_export double Degtorad( double deg )
{
    return( deg * 3.14 / 180 );
}

Kompilujesz i masz.

Pasi? Nie nauczysz się patrząc na sam przykład. Musisz zrozumieć co można zrobić i jak to zrobić. Sam też na początku nie wiedziałem jak napisać głupią dllke w C++.

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