[RESUELTO]¿como ejecutar el DllMain de una dll estandar hecha en vb6?

Iniciado por Arconte, 14 Julio 2012, 05:32 AM

0 Miembros y 2 Visitantes están viendo este tema.

Arconte

segui el tutorial de elguille donde muestra como crear una dll estandar y todo me salio bien excepto que no se logra ejecutar el DllMain al cargar la dll, en algunos post decian que se tiene que cambiar el ep , ¿asi se soluciona el problema, como se hace eso?

raul338

Tu quieres hacer una DLL estandar y poner algo al ejecutar el DLLMain? O queres cargar una DLL y ejecutar su DllMain automaticamente?

Si es la primera, busca sobre vbadvance ( esta descontinuado ) y la segunda... supongo que con API's...

Arconte

se supone que al cargar una dll se deberia ejecutar automaticamente la funcion DllMain como en las dll hechas en c y lo que quiero es eso precisamente ¿como lo hago?

Código (vb) [Seleccionar]
Public Function DllMain(hInst As Long, fdwReason As Long,
  lpvReserved As Long) As Boolean
   Select Case fdwReason
      Case DLL_PROCESS_DETACH
         ' No per-process cleanup needed
      Case DLL_PROCESS_ATTACH
         DllMain = True
      Case DLL_THREAD_ATTACH
         ' No per-thread initialization needed
      Case DLL_THREAD_DETACH
         ' No per-thread cleanup needed
   End Select
   
End Function



rembolso

La Dll en VB no funciona...tiene que ser una en C/C++ :-[ :-[ :-[ :-[ :-[

raul338


rembolso

si tu quieres hacer un Inyeccion Dll en VB. con una dll made for vb. no te va a funcionar por mas que el programa sea el notepad. pero si la dll esta en c/c++ si. espero no equivocarme !!! :huh:

cobein

Si se pueden hacer dll standard y si se pueden inyectar, lo dificil es hacer la libreria correctamente para no explotar el proceso inyectado.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Arconte

gracias raul338 , probe ese programa vbAdvance y si me anda rebien, tan solo con cargar la dll se ejecuta automaticamente el dllmain y al descargarse se vuelve a ejecutar, lo probe con este  codigo

la Dll:

Option Explicit


Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" ( _
ByVal hwnd As Long, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As Long) As Long


Public Function DllMain() As Long
    DllMain = MessageBox(0, "hola", "titulo", 64)
    DllMain = MessageBox(0, "hola", "titulo", 48)
    DllMain = MessageBox(0, "hola", "titulo", 16)
End Function



el programa:

Option Explicit

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long



Dim hModule As Long
Private Sub Command1_Click()
    hModule = LoadLibrary("test.dll")
    Me.Caption = hModule
End Sub

Private Sub Command2_Click()
    Call FreeLibrary(hModule)
    Me.Caption = ""
End Sub

Private Sub Form_Load()
    Me.Caption = ""
End Sub


aunque si  cierras el programa sin antes descargar la dll me sale un mensaje de error : la instruccion "xxxxxxx" hace referencia a la memoria "xxxxx" no se puede written , pero es un problema de lo mas minimo que lo solucione con FreeLibrary, gracias y saludos.

raul338

Cita de: Arconte en 19 Julio 2012, 05:18 AM
aunque si  cierras el programa sin antes descargar la dll me sale un mensaje de error : la instruccion "xxxxxxx" hace referencia a la memoria "xxxxx" no se puede written , pero es un problema de lo mas minimo que lo solucione con FreeLibrary, gracias y saludos.
Y claro, es como manejar punteros, si terminas sin liberarlos tienes un problema de memoria :P solo que en este caso ni el sistema se encarga de liberarlo :xD