DLL Entrypoint

08/24/2013 16:59 BrendonHomo#1
Hi,

warum will das so nicht klappen?

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


DWORD WINAPI Entrypoint(const LPVOID& reserved)
{
	MessageBox(NULL, "test", "test", NULL);
	return 0;
}

bool WINAPI DllMain(const HINSTANCE& handleDLL, const DWORD& callingReason, const LPVOID& reserved)
{
	if(callingReason == DLL_PROCESS_ATTACH)
	{
		std::thread threadEntry(Entrypoint, reserved);
		threadEntry.join();
	}

	return 1;
}
08/24/2013 17:50 Master674b#2
Warum sind die Argumente für DllMain als const & deklariert?
Und nochwas: Wieso bool als Rückgabewert, wenn du 1 zurückgibst? Sollte zwar nichts ausmachen aber trotzdem, wozu? bool != BOOL. Das Funktionsobjekt, dass du std::thread übergibst kann übrigens irgend eine X beliebige Signatur haben. Muss nicht eine Windows Threadproc sein.
08/24/2013 18:03 Cr4ck3r385#3
why you don´t talk english?


anyway,you cant use std:: inside DllMain function.
Ypu should do it this way --->
Code:
if(Reason == DLL_PROCESS_ATTACH)
{  
   _beginthread(MainHackFunc,0,NULL)
}
return 1;
and MainHackFunc is the code that contais tle while(1) loop,and the hotkeys,you can create also another thread to make a "functions "execution" thread".
08/24/2013 18:44 BrendonHomo#4
Quote:
Originally Posted by Master674b View Post
Warum sind die Argumente für DllMain als const & deklariert?
Und nochwas: Wieso bool als Rückgabewert, wenn du 1 zurückgibst? Sollte zwar nichts ausmachen aber trotzdem, wozu? bool != BOOL. Das Funktionsobjekt, dass du std::thread übergibst kann übrigens irgend eine X beliebige Signatur haben. Muss nicht eine Windows Threadproc sein.
const & spart doch Performance (auch wenn es in diesem Fall nichts ausmachen würde sowie in anderen fällen) oder habe ich da was falsch verstanden?

In der tat, ich bin davon ausgegangen, dass bool == BOOL ist, war der Meinung es währe typedeft.

Zum Thema std::thread, hatte CreateThread im Gedanken, da spielt die "Signatur" ja eine rolle, zumindest laut MSDN.

Wieder was neues dazugelernt. :D
08/24/2013 18:47 Tasiro#5
Du kannst auch ganz normal CreateThread und (bestimmt auch) std::thread nutzen, solange du keinen Jahrzehnte alten Compiler nutzt. Aber dann würdest du auch nicht std::thread nutzen.
Du darfst aber nicht thread.join aufrufen. Der Thread wird erst dann ausgeführt, wenn die DllMain fertig ist. Es ist also eine schlechte Idee, auf den Thread zu warten.

Konstante Referenzen sind nur bei größeren Objekten sinnvoll, sonst wird möglicherweise eine Adresse noch größer als das Adressierte selbst kopiert. Und wenn dir eine Signatur vorgegeben wird, solltest du dich an diese halten.
08/24/2013 18:59 BrendonHomo#6
Quote:
Originally Posted by Tasiro View Post
Du kannst auch ganz normal CreateThread und (bestimmt auch) std::thread nutzen, solange du keinen Jahrzehnte alten Compiler nutzt. Aber dann würdest du auch nicht std::thread nutzen.
Du darfst aber nicht thread.join aufrufen. Der Thread wird erst dann ausgeführt, wenn die DllMain fertig ist. Es ist also eine schlechte Idee, auf den Thread zu warten.
Ah ich verstehe, das war auch der Grund wieso nichts passierte.

Quote:
Konstante Referenzen sind nur bei größeren Objekten sinnvoll, sonst wird möglicherweise eine Adresse noch größer als das Adressierte selbst kopiert. Und wenn dir eine Signatur vorgegeben wird, solltest du dich an diese halten.
Das wusste ich auch noch nicht, von welcher Größenordnung ist hier die rede?

Danke das ihr euer Wissen mit mir teilt. :P
08/24/2013 19:18 Padmak#7
Ich denke alles, das größer als 4 oder 8 Bytes ist, bzw Objekte allgemein

Padmak