Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 12:22

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Dll Code

Discussion on Dll Code within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Dll Code

Hejo, hab gerade ein bisschen mit Dlls rumgespielt und versucht functions die in einer Dll sind in meiner exe aufzurufen und wollte einfach mal fragen wie man das vielleicht noch besser machen könnte, manche Sachen sind da sicher nicht so gut gelöst / unnötig.


Einmal die main.h der Dll:

Code:
#ifndef __MAIN_H__
#define __MAIN_H__
#endif
#include <Windows.h>

#define DLL_EXPORT __declspec(dllexport)
#ifdef __cplusplus
extern "C"
{
#endif
	int DLL_EXPORT Testfunction(int x);
	int DLL_EXPORT Rechnen(int i, int y);
	int DLL_EXPORT Ausgeben();

#ifdef __cplusplus
}
#endif
Einmal die Quelle.cpp der Dll
Code:
#include "main.h"
#include <iostream>
int DLL_EXPORT Testfunction(int x = 0){
	MessageBox(0,"lololowwwwwwwwwwwl", "wqgqwwwwwgq", MB_OK |MB_ICONINFORMATION);
	return x;
}
int DLL_EXPORT Rechnen(int i, int y){
	int z = i + y;
	return z;
}
int DLL_EXPORT Ausgeben(){
	std::cout << "test";
	return 1;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason)
{return 1;}
Und einmal die exe an sich

Code:
#include <iostream>
#include <Windows.h>

using namespace std;
typedef int (*Testfunction)(int);
typedef int (*Rechnen)(int, int);
typedef int (*Ausgeben)();
HINSTANCE hinstDLL;

int main(){
	Testfunction MsgBox(0) ;
	Rechnen MsgBox2(0) ;
	Ausgeben MsgBox3(0 ) ;
	hinstDLL = LoadLibrary("RealDLL.dll");
	if (hinstDLL != 0)
	{
		Testfunction= (Testfunction) GetProcAddress(hinstDLL, "Testfunction");
		 Rechnen = (Rechnen) GetProcAddress(hinstDLL, "Rechnen");
		Ausgeben = (Ausgeben) GetProcAddress(hinstDLL, "Ausgeben");
	}
	if (Testfunction== 0 ) cout << "Message Box failed";
	int AusgabeNumeroUno = Testfunction(5);
	int AusgabeNumeroDuo = Rechnen (5,2);
	int AusgabeNumeroTres = Ausgeben ();
	if ( AusgabeNumeroUno  == 5 )
	{
		cout << "Message displayed!" << AusgabeNumeroDuo  << AusgabeNumeroTres << endl;
	}
	Sleep(10000);
	FreeLibrary(hinstDLL);
}
Hiris is offline  
Old 05/26/2013, 12:39   #2
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Beim Erstellen der DLL müsste dir auch eine *.lib-Datei erstellt worden sein, nimm einfach deinen Header, diesmal aber mit __declspec(dllimport) und mach dem Programm damit die Funktionen bekannt, hau die *.lib-Datei in die Abhängigkeiten und compile das. Wenn du dann die DLL in das Verzeichnis der EXE haust, müsste das funktionieren
Außer du bestehst auf das dynamische Laden per LL

Padmak
Padmak is offline  
Old 05/26/2013, 13:30   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
In deiner Exe willst du den Pointer-Typen die Ergebnisse von GetProcAddress zuweisen. Da sollten logischerweise die Variablennamen stehen.
MrSm!th is offline  
Old 05/27/2013, 17:52   #4
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Variablen in Funktionen gleich mit richtigen Werten initialisieren! Der ganze Rest (wie globale Variablen oder Absturz ohne RealDLL.dll) sind nicht so wichtig.

Code:
#include <iostream>
#include <Windows.h>

int main () {
    using std::cout;
    using std::endl;
    typedef int (__stdcall * Testfunction) (int);
    typedef int (__stdcall * Rechnen) (int, int);
    typedef int (__stdcall * Ausgeben) ();

    HMODULE hinstDLL = LoadLibrary ("RealDLL.dll");
    if (! hinstDLL) {
        cout << "Message Box failed";
        cin.get ();
        return 1;
    }

    Testfunction MsgBox = reinterpret_cast <Testfunction> (GetProcAddress (hinstDLL, "Testfunction"));
    Rechnen MsgBox2 = reinterpret_cast <Rechnen> (GetProcAddress (hinstDLL, "Rechnen"));
    Ausgeben MsgBox3 = reinterpret_cast <Ausgeben> (GetProcAddress (hinstDLL, "Ausgeben"));

    int AusgabeNumeroUno = MsgBox (5);
    int AusgabeNumeroDuo = MsgBox2 (5, 2);
    int AusgabeNumeroTres = MsgBox3 ();
    if (AusgabeNumeroUno == 5)
        //stdout ist normalerweise nicht oder nur zeilenweise gepuffert
        cout << "Message displayed!\n"
             << AusgabeNumeroDuo << '\n'
             << AusgabeNumeroTres << '\n';

    FreeLibrary (hinstDLL);
    cin.get ();
}
Tasiro is offline  
Old 05/27/2013, 18:43   #5
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Quote:
Originally Posted by Tasiro View Post
Variablen in Funktionen gleich mit richtigen Werten initialisieren! Der ganze Rest (globale Variablen, Absturz ohne RealDLL.dll,

Code:
#include <iostream>
#include <Windows.h>

int main () {
    using std::cout;
    using std::endl;
    typedef int (__stdcall * Testfunction) (int);
    typedef int (__stdcall * Rechnen) (int, int);
    typedef int (__stdcall * Ausgeben) ();

    HMODULE hinstDLL = LoadLibrary ("RealDLL.dll");
    if (! hinstDLL) {
        cout << "Message Box failed";
        cin.get ();
        return 1;
    }

    Testfunction MsgBox = reinterpret_cast <Testfunction> (GetProcAddress (hinstDLL, "Testfunction"));
    Rechnen MsgBox2 = reinterpret_cast <Rechnen> (GetProcAddress (hinstDLL, "Rechnen"));
    Ausgeben MsgBox3 = reinterpret_cast <Ausgeben> (GetProcAddress (hinstDLL, "Ausgeben"));

    int AusgabeNumeroUno = MsgBox (5);
    int AusgabeNumeroDuo = MsgBox2 (5, 2);
    int AusgabeNumeroTres = MsgBox3 ();
    if (AusgabeNumeroUno == 5)
        //stdout ist normalerweise nicht oder nur zeilenweise gepuffert
        cout << "Message displayed!\n"
             << AusgabeNumeroDuo << '\n'
             << AusgabeNumeroTres << '\n';

    FreeLibrary (hinstDLL);
    cin.get ();
}
Hm dein Code ruft gefühlte over 9000 exceptions aus, unbehandelter Zuggriff etc. , kanns mir aber nicht erklären, sieht eigentlich richtig aus, die Messagebox gibt er noch an aber er hat laut anzeige ein Problem das return x von
Code:
int DLL_EXPORT Testfunction(int x = 0){
	MessageBox(0,"lololowwwwwwwwwwwl", "wqgqwwwwwgq", MB_OK |MB_ICONINFORMATION);
	return x;
}
zu übersetzen, hast du eine Ahnung warum?
Hiris is offline  
Old 05/27/2013, 19:33   #6
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Scheint, als habe ich vergessen, zuende zu schreiben...

Quote:
Originally Posted by Hiris View Post
Hm dein Code ruft gefühlte over 9000 exceptions aus [...]
Ich komme nur auf einen, den beim Absturz. Davon abgesehen ist das beinahe eine exakte Kopie von dem, was da ganz am Anfang dieses Themas steht, gleich im ersten Beitrag, dort im dritten Code-Block.

Quote:
[...] er [...]
Ist?
Tasiro is offline  
Old 05/27/2013, 20:44   #7
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Quote:
Originally Posted by Tasiro View Post
Scheint, als habe ich vergessen, zuende zu schreiben...

Ich komme nur auf einen, den beim Absturz. Davon abgesehen ist das beinahe eine exakte Kopie von dem, was da ganz am Anfang dieses Themas steht, gleich im ersten Beitrag, dort im dritten Code-Block.

Ist?
Der Compiler?
Hiris is offline  
Old 05/27/2013, 22:03   #8
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Der Compiler hat Probleme, eine bestimmte Anweisung auszuführen? Das kann doch gar nicht sein! Der Compiler sollte nur eines ausführen: Programme zur Berechnung der Konstanten bei der Konstantenfaltung. Ich kann dein Problem leider nicht nachvollziehen.
Tasiro is offline  
Old 05/27/2013, 22:32   #9
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Quote:
Originally Posted by Tasiro View Post
Der Compiler hat Probleme, eine bestimmte Anweisung auszuführen? Das kann doch gar nicht sein! Der Compiler sollte nur eines ausführen: Programme zur Berechnung der Konstanten bei der Konstantenfaltung. Ich kann dein Problem leider nicht nachvollziehen.


Auf die Gefahr hin eine Verwarnung zu bekommen, frage ich dich mal ob du mich verarschen willst oder einfach nur verhindert bist?
Sollte letzteres zutreffen, hier haste Wikipedia:

Code:
Ein Compiler (auch Kompiler; von englisch für zusammentragen bzw. lateinisch compilare ‚aufhäufen‘) ist ein Computerprogramm, welches ein (anderes) Programm, das in einer bestimmten Programmiersprache geschrieben ist, in eine Form übersetzt, die von einem Computer, d. h. von dessen Prozessor, ausgeführt werden kann.
Hiris is offline  
Old 05/27/2013, 22:57   #10
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Ein Compiler ist ein Programm, welches ein Programm von einer Quellsprache in eine Zielsprache übersetzt, nicht mehr und nicht weniger. In diesem Zusammenhang wird unterschieden zwischen Laufzeit und Kompilierzeit; Laufzeit ist während der Ausführung eines (übersetzten) Programmes, Kompilierzeit ist während der Laufzeit eines Compilers.
Bei der Codeoptimierung kann zur Konstantenfaltung eine Konstante mithilfe eines weiteren Programmes berechnet werden, welches der Compiler aufgrund der Definition der Konstante erstellt. Damit ist der Compiler unabhängig von dem Betriebssystem und muss nicht selbst Ausdrücke auswerten können, dadurch muss der Compiler nicht so groß sein.

Ich nehme dies als Grundlage. Ich verstehe nicht, was du sagen wolltest; ich bitte dich, kläre mich auf.
Tasiro is offline  
Old 05/28/2013, 06:56   #11

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Der Compiler hat ein Problem wollte Hiris dir sagen. Einfach das "er" durch "der Compiler" ersetzen und der Satz ergibt erstaunlicherweise einen Sinn - LOLOLOLOLOL!

Hiris, schau dir einfach irgendeine C++-Library an. Da du in deinem Post ja nichts von dynamisch laden geschrieben hast, denke ich einfach mal, dass dir das egal ist?
Delinquenz is offline  
Old 05/28/2013, 10:31   #12
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Quote:
Originally Posted by Delinquenz View Post
Der Compiler hat ein Problem wollte Hiris dir sagen. Einfach das "er" durch "der Compiler" ersetzen und der Satz ergibt erstaunlicherweise einen Sinn - LOLOLOLOLOL!

Hiris, schau dir einfach irgendeine C++-Library an. Da du in deinem Post ja nichts von dynamisch laden geschrieben hast, denke ich einfach mal, dass dir das egal ist?
Ne das passt alles, sein "verbesserter" Code throwt nur an der return stelle der ersten function eine exception, führt die message box etc. aber noch aus, was ich nicht ganz nachvollziehen konnte, aber ist auch egal, ich machs jetzt einfach so wie Padmak es meinte, ist deutlich schöner und angenehmer
Hiris is offline  
Reply


Similar Threads Similar Threads
[GAMESCOM-SHOP] Vindictus Code, FireFall BETA Code, McGame.com Code, Victory Ukash
10/18/2012 - elite*gold Trading - 8 Replies
Hallo Leute hab ein paar Sachen auf der Gamescom gesammelt und übrig, diese möchte ich hier verkaufen. Ich akzeptiere nur Paypal, E*gold und Paysafecards! Hier ist eine Liste mit Bildern (natürlich sind die Codes zensiert :D): 1. Firefall Beta KEY Ihr macht den Preis! Bild 2. Vindictus Code 50 e*gold Bild
used king Rammus code OR katarina kitty cat code (KR) → used PAX sivir code (NA / EU)
08/21/2012 - League of Legends Trading - 1 Replies
your "already used in the NA / EU servers is Pax Sivir Code" Do you have? Want to exchange "Pax Sivir Code" I "king Rammus code OR Katarina kitty cat code" will provide I use this code in the NA / EU servers did not. just. South Korea on a server, you should not use Pax Sivir Code. If you are interested in this deal, contact me. e-mail: [email protected]
used king Rammus code OR katarina kitty cat code (KR) → used PAX sivir code (NA / EU)
08/20/2012 - League of Legends Trading - 0 Replies
Hello Korea is my server users. I NA / EU servers have already been used in the "Pax Sivir Code" wants As a reward, "king Rammus code OR Katarina kitty cat code" I will send you to gift. Have already used the code, Feel free to do the exchange! Please send mail [email protected]



All times are GMT +2. The time now is 12:22.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.