Dllcall auf eigener dll?

05/10/2012 18:36 Logtetsch#1
Servus,

hab mir eben ne kleine .dll in C++ geschrieben.
Die führt eine einfache Main funktion aus, die den typen int besitzt.
Also, sobald die dll in einen Process attached wird, wird die Main Funktion ausgeführt und eine MessageBox wird geöffnet. Diese befindet sich ebenfalls in der Main Funktion.

Nun meine Frage.
Kann ich diese Funktion mithilfe von Autoit aufrufen wie z.B mit dem dllcall ?
05/10/2012 18:42 Lawliet#2
Willst du sie Injecten? Ansonsten geht das natürlich mit DllCall.
05/10/2012 18:56 Logtetsch#3
Beides.

Das injekten klappt ja auch mit AutoIt.
Aber wie kann ich das jetzt mit Dllcall aufrufen ?

Hier mal meine Main Funktion

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

int Main()
{
    
MessageBoxA (NULL"Lol rofl""xD"NULL);
    return 
0;
}


BOOL WINAPI DllMain(HINSTANCE hInstanceDWORD dWORDLPVOID lpVoid)
{
    switch(
dWORD)
    {
    case 
DLL_PROCESS_ATTACH:
        
Main();
        break;
     case 
DLL_PROCESS_DETACH
        break;
    }
    return 
TRUE;

05/11/2012 20:03 KDeluxe#4
Was genau hast du den vor? Möchtest du eine .dll in deinem Script laden, welche beim laden eine Funktion ausführt? Soll die .dll einen Thread in deiner AutoIt .exe startet, welche Aufgaben übernimmt, oder beinhaltet die .dll nur Funktionen, die du per DllCall() ausführen möchtest?
Das geht nirgendwo wirklich heraus, da du DllCall() aber erwähnt hast gehe ich mal von letzterem aus.

Ich habe einfach mal ein Beispiel geschrieben, welches alle genannten Fälle beinhaltet:

AutoIt .au3:
Code:
$hDll = DllOpen("DLL.dll")	;Dll wird geladen -> DllMain -> DLL_PROCESS_ATTACH
							;Funktionen der DllMain werden ausgeführt:
							;ruft "MessageCall" auf und erstellt anschließend den Thread "MessageThread"

If Not @error Then
	$ReturnString = DllCall("DLL.dll", "str", "GetText") ;ruft die Funktion "GetText" aus der .dll auf
	If @error Then
		MsgBox(0, "Fehler", @error)
	Else
		MsgBox(0, "", $ReturnString[0])
	EndIf

	DllClose($hDll)
EndIf
C++ .dll
Code:
#include <Windows.h>

extern "C" __declspec(dllexport) LPSTR GetText(void)
{
	return "GetText() -> $ReturnString[0]";
}

DWORD WINAPI MessageThread(LPVOID lpParameter)
{
	MessageBoxA(0, (LPCSTR)lpParameter, "MessageThread", MB_OK);
	return 0;
}

int MessageCall(LPCSTR lpText)
{
	MessageBoxA(0, lpText, "MessageCall", MB_OK);
	return 0;
}

int WINAPI DllMain(HINSTANCE hDllInstance, DWORD dwReason, LPVOID)
{
	if(dwReason == DLL_PROCESS_ATTACH)
	{
		MessageCall("Text");
		CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MessageThread, (LPVOID)"Text", 0, 0);
	}
	//...

	return TRUE;
}
05/11/2012 22:47 Logtetsch#5
Ja. Das war genau das, wo nach ich gesucht habe.

#closerequest
05/12/2012 13:43 Lawliet#6
#closed