Error en tiempo de ejecucion: El componente activex no puede crear el objeto

Iniciado por shaggikpo, 8 Diciembre 2009, 02:20 AM

0 Miembros y 1 Visitante están viendo este tema.

shaggikpo


Desde el ide muestra el MSGBOX pero no funciona la funcion y cuando genero el exe y llamo la dll me da el erro del titulo le dejo el code:
Ojala puedan ayudarme

Proceso.exe
Código (vb) [Seleccionar]
Private Declare Function DllMain Lib "Loader.dll" () As String

Private Sub Command1_Click()
DllMain
End Sub

Loader.dll
Código (vb) [Seleccionar]






'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' Funciòn APi para buscar Ventanas de Windows
Public Declare Function FindWindow _
    Lib "user32" _
    Alias "FindWindowA" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
   

'Para finalizar dicha ventana
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
                 ByVal hwnd As Long, _
                 ByVal wMsg As Long, _
                 ByVal wParam As Long, _
                 lParam As Any) As Long

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
     ByVal hwnd As Long, _
     ByVal lpOperation As String, _
     ByVal lpFile As String, _
     ByVal lpParameters As String, _
     ByVal lpDirectory As String, _
     ByVal nShowCmd As Long) As Long


Public Sub Comprobar()
Dim clase As String
clase = ThunderRT6FormDC
Dim ret As Long

    ' busca la ventana y retorna el Handle
    ret = FindWindow(clase, "MuPaysandú V 1.0.59")
   
    'si retorna distinto _
     de 0 es porque la encontró
    If ret <> 0 Then
                ' Finaliza la ventana
             Log ("Launcher cerrado corectamente con el HWD " & ret)
            SendMessage ret, "&H112", "&HF060&", ByVal 0
           
           
           
        Else
        Log ("Launcher no encontrado.")
        ret = FindWindow("MU", vbNullString)
        If ret <> 0 Then
            SendMessage ret, "&H112", "&HF060&", ByVal 0
            Log ("Procediendo a cerrar el Cliente.")
            Log ("Abriendo Launcher.")
            ShellExecute ret, "Open", App.Path & "\MU.exe", vbNullString, "0", "1"
            Else
            Log ("MuPaysandu No encontrado.")
        End If
    End If
   
End Sub


   



Public Sub Log(Razon As String)
    Open App.Path & "\log.txt" For Append As 1
    Print #1, "[" & Date & "] " & Razon
    Close #1
End Sub


   




Public Function DllMain() As String
         MsgBox "DLL CARGADA"
          Comprobar
End Function


LeandroA

que es lo que no te funciona?.

SendMessage ret, WM_SYSCOMMAND, SC_CLOSE, ByVal 0

cierra la ventana pero no mata el proceso si la ventana no es la unica en ejecucion.

seguro que este es el nombre de clase ThunderRT6FormDC mira que si la aplicacion esta en ide es otro el classname.

Saludos.

shaggikpo

Si el cass esta bien ya lo revise
el program cierra la primera ventana y lanza el proceso pero si inicio el proceso solo y la primera ventana no esta preceste el proceso actual debrei acerrarse y abier el MU.exe

Dessa

Solo una acotación, la clase de los formularios (ventanas) echos en VB se llaman "ThunderFormDC" si se ejecutan desde el IDE, pero esta clase cambia por "ThunderRT6FormDC" si  se ejecuta desde el exe compilado.


Adrian Desanti

shaggikpo

Lo dices tan seguro pero no es asi sucede que si ves la class de la vantana de el exe compilado el cual se busca es la que yo puse aqui un a prueba si se dejan de decir eso ya que ese no es el problema.


Dessa

Cita de: LeandroA en  8 Diciembre 2009, 02:52 AM
seguro que este es el nombre de clase ThunderRT6FormDC mira que si la aplicacion esta en ide es otro el classname.

shaggikpo: No estoy diciendo que es tu problema, estoy haciendo una acotación sobre el tema de la clase del form de vb:

"ThunderFormDC" si se ejecutan desde el IDE,
"ThunderRT6FormDC" si se ejecuta compilado.


Option Explicit

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Private Sub Form_Load()
 
  Me.AutoRedraw = True: Me.FontBold = True

  Dim ClassName As String: ClassName = Space$(255)
  Dim ret As Long: ret = GetClassName(Me.hwnd, ClassName, 255)
  Me.Print Left$(ClassName, ret)

End Sub




PD: me pareció importante pero perdón si te molestó.

Adrian Desanti