D Dll injection problem

Gyron Threk at web.de
Tue May 15 12:59:07 PDT 2012


On Monday, 14 May 2012 at 09:53:55 UTC, Kagamin wrote:
> Try to make C dll, which loads D dll, and inject the C dll :)

I made a bootstrapper (a c DLL which loads the D Dll) and it 
works fine (the D entrypoint get called (a made a msgbox test) 
but then the Process freezes after it displayed the MsgBox.

C Dll:

#include <windows.h>

bool _stdcall DllMain(_In_ void * _HDllHandle, _In_ unsigned 
_Reason, _In_opt_ void * _Reserved)
{
     if(_Reason == DLL_PROCESS_ATTACH)
     {
         MessageBox(NULL,L"test",L"test",MB_OK);
         LPTHREAD_START_ROUTINE LoadLibAddy =
             
(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32.dll"),
             "LoadLibraryA");
         
CreateThread(NULL,0,LoadLibAddy,"C:\\Users\\Moritz\\Documents\\Visual 
Studio 
11\\Projects\\D_Projects\\D_BootStrapper\\Debug\\DAstral.dll",0,NULL);
     }

     return true;
}

D Dll:
import std.c.windows.windows;
import core.sys.windows.dll;

__gshared HINSTANCE g_hInst;

extern (Windows)
BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID
pvReserved)
{
     final switch (ulReason)
     {
	case DLL_PROCESS_ATTACH:
	    g_hInst = hInstance;
	    MessageBoxA(null,"test2","test2",MB_OK);
	    dll_process_attach( hInstance, true );
	    break;

	case DLL_PROCESS_DETACH:
	    dll_process_detach( hInstance, true );
	    break;

	case DLL_THREAD_ATTACH:
	MessageBoxA(null,"test","test",MB_OK);
	    dll_thread_attach( true, true );
	    break;

	case DLL_THREAD_DETACH:
	    dll_thread_detach( true, true );
	    break;
     }
     return true;
}

Any help ?


More information about the Digitalmars-d-learn mailing list