Buenas noches, estoy tratando de hacer un software que use las funciones establecidas en una DLL, dicha DLL no fue creada por mi ni tengo el source, pero pude ver su contenido usando ciertos programas, siendo su contenido el siguiente.
//BBCFPCOM 1.0 Type Library
//Version: 1.0
BBCFPCOMLib;
GUID = {C2CFDD51-0603-4889-9FF5-B943AA46118B};
Enum CFP_TYPE;
CFP_TYPE_NORMAL = 0;
CFP_TYPE_PATRIOT = 1;
CFP_TYPE_EDW = 2;
CFP_TYPE_RMA = 3;
CFP_TYPE_STP = 4;
CFP_TYPE_BRL = 5;
//CFPGRSCOM Class
CoClass CFPGRSCOM;
GUID = {3B5626A7-724D-4F17-A980-002FDC26B567};
//BBCFPCOM 1.0 Type Library
Interface ICFPGRSCOM;
GUID = {33CF20BC-B452-4529-B78E-B48E821AF3A8};
//Connect to Any USB device found
function ConnectAnyUSB(nMaxTimeoutMs: I4; nResetTimeOutMs: I4): HResult; stdcall;
//method ConnectToBootImage
function ConnectToBootImage: HResult; stdcall;
//Erase files and OS
function Wipe(bWipeOS: Bool): HResult; stdcall;
Entonces por lo que veo dicha DLL (Desarrollada en .NET) Tiene las siguientes funciones:
-ConnectAnyUSB
-ConnectToBootImage
-Wipe
Necesito usar dichas funciones, pero no logro hacerlo.
Hice un nuevo proyecto en Visual Basic 6, registre dicha DLL y la agregue como referencia en mi proyecto.
Lugo hice el siguiente code:
Dim CFP As BBCFPCOMLib.CFPGRSCOM
Private Sub Command1_Click()
Set CFP = New BBCFPCOMLib.CFPGRSCOM
CFP.ConnectAnyUSB 50, 50
CFP.ConnectToBootImage
End Sub
Dandome error de Timeout en ConnectToBootImage, cuando dicha funcion no tiene TimeOut.
Tambien intente llamando a la DLL desde un modulo:
Public Declare Function ConnectToBootImage Lib "BBCFPCOM.dll" ()
Public Declare Function ConnectAnyUSB Lib "BBCFPCOM.dll" (ByVal nMaxTimeoutMs As Integer, ByVal nResetTimeOutMs As Integer)
y luego haciendo la llamada desde dicha DLL
Private Sub Command1_Click()
Call Module1.ConnectAnyUSB(50, 0)
Call Module1.ConnectToBootImage
End Sub
Y ahora me muestra que:
"Can't Find DLL entry point ConnectAnyUSB in BBCFPCOM.dll"
me dice que no encuentra dicha funcion, pero si presiono F2 si aparece como una funcion de dicha DLL.
Descarga la DLL
http://www.megaupload.com/?d=P24K7EPM
Ahora agregue la DLL como referencia en el proyecto y escribi el siguiente codigo:
Option Explicit
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private WithEvents frmNET As BBCFPCOMLib.CFPGRSCOM
Private Sub Command1_Click()
Set frmNET = New CFPGRSCOM
frmNET.ConnectAnyUSB 50, 0
frmNET.ConnectToBootImage
End Sub
Y se me queda colgada la PC al momento de ConnectAnyUSB, alguna ayuda?? tengo windows 7, formateare y pondre winxp para ver qe tal.
Cmbie a Visual Basic .NET y ahora si me reconoce la interface ICFPGRSCOM
Public Class Form1
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Dim CFP As BBCFPCOMLib.ICFPGRSCOM
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
CFP.ConnectAnyUSB(50, 0)
End Sub
End Class
Pero ahora me da un error con el CFP.
No se controlo NullReferenceException
Referencia a objeto no establecida como instancia de un objeto
sera que te falta instanciar el objeto CFP con la palabra New, ahi solo la declaraste.
PD: esa api InitCommonControls no es necesaria en .NET
ese es el detalle... que no me deja poner:
Dim cfp As New BBCFPCOMLib.ICFPGRSCOM
Ya que NEW no se puede utilizar en una interfaz
'New' cannot be used on an interface
Instrucción Dim (Visual Basic) utiliza una cláusula New (Visual Basic) al declarar una variable para que sea de un tipo de interfaz.
Aunque una interfaz es un tipo de referencia, no puede crear una instancia de él. Sólo puede utilizar New para crear una instancia de una clase o una estructura.
Identificador de error: BC30375
Para corregir este error
1.Si la variable va a ser de un tipo de interfaz, quite la palabra clave New.
2.Si la variable va a hacer referencia a una instancia, declárela para que sea de una clase o un tipo de estructura. Conserve la palabra clave New para crear una instancia.
FUENTE: MSDN
Mas no entiendo dicha solucion
.
Que idiotes puse :'(
perdona no sabia que era una interfaz, recien me bajo la libreria y lo vi, no estoy seguro pero creo que debes implementarla asi:
Imports BBCFPCOMLib
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ser As New Libreria
ser.ConnectAnyUSB(50, 0)
End Sub
End Class
Public Class Libreria
Implements BBCFPCOMLib.CFPGRSCOM
Public Event OnDebugMessage(ByVal nLogLevel As Integer, ByVal bstrMessage As String) Implements BBCFPCOMLib._ICFPEvents_Event.OnDebugMessage
Public Event OnNeedPassword(ByVal nTriesRemaining As Integer, ByRef password As String) Implements BBCFPCOMLib._ICFPEvents_Event.OnNeedPassword
Public Event OnProgress(ByVal bstrCode As String, ByVal nPercent As Integer, ByVal ulExtraInfo As UInteger) Implements BBCFPCOMLib._ICFPEvents_Event.OnProgress
Public Sub Abort() Implements BBCFPCOMLib.ICFPGRSCOM.Abort
End Sub
Public Sub Connect(ByVal nComport As Integer, ByVal nConnectBaudRate As Integer, ByVal nMaxTimeoutMs As Integer, ByVal nResetTimeOusMs As Integer) Implements BBCFPCOMLib.ICFPGRSCOM.Connect
End Sub
Public Sub ConnectAnyUSB(ByVal nMaxTimeoutMs As Integer, ByVal nResetTimeOutMs As Integer) Implements BBCFPCOMLib.ICFPGRSCOM.ConnectAnyUSB
End Sub
Public Sub ConnectToBootImage() Implements BBCFPCOMLib.ICFPGRSCOM.ConnectToBootImage
End Sub
Public Sub ConnectToBootrom() Implements BBCFPCOMLib.ICFPGRSCOM.ConnectToBootrom
End Sub
Public Property ConnectType() As BBCFPCOMLib.CFP_TYPE Implements BBCFPCOMLib.ICFPGRSCOM.ConnectType
Get
End Get
Set(ByVal value As BBCFPCOMLib.CFP_TYPE)
End Set
End Property
Public Sub ConnectUSB(ByVal bstrProperty As String, ByVal bstrValue As String, ByVal nMaxTimeoutMs As Integer, ByVal nResetTimoeOutMs As Integer) Implements BBCFPCOMLib.ICFPGRSCOM.ConnectUSB
End Sub
Public Sub Disconnect1() Implements BBCFPCOMLib.ICFPGRSCOM.Disconnect
End Sub
Public Sub GetBootromInfo(ByRef pulBRver As UInteger, ByRef pbSecurityEnabled As Boolean) Implements BBCFPCOMLib.ICFPGRSCOM.GetBootromInfo
End Sub
Public Sub GetCFPVersion(ByRef pulCFPver As UInteger) Implements BBCFPCOMLib.ICFPGRSCOM.GetCFPVersion
End Sub
Public Function GetCOMBuildVersion() As String Implements BBCFPCOMLib.ICFPGRSCOM.GetCOMBuildVersion
End Function
Public Function GetCOMBuildVersionID() As UInteger Implements BBCFPCOMLib.ICFPGRSCOM.GetCOMBuildVersionID
End Function
Public Function GetFlashSizeInBytes() As UInteger Implements BBCFPCOMLib.ICFPGRSCOM.GetFlashSizeInBytes
End Function
Public Sub GetOSVersionOfSFI(ByVal bstrFileName As String, ByRef pulOSver As UInteger) Implements BBCFPCOMLib.ICFPGRSCOM.GetOSVersionOfSFI
End Sub
Public Sub GetOSVersionOfSFIEx(ByVal bstrFileName As String, ByRef pulOSver As UInteger, ByRef pbstrOSver As String) Implements BBCFPCOMLib.ICFPGRSCOM.GetOSVersionOfSFIEx
End Sub
Public Function GetPatriotVersion() As String Implements BBCFPCOMLib.ICFPGRSCOM.GetPatriotVersion
End Function
Public Sub GetPlatformID(ByRef pulPID As UInteger, ByRef pbstrDeviceString As String) Implements BBCFPCOMLib.ICFPGRSCOM.GetPlatformID
End Sub
Public Sub GetSFIOSVersionPlatID(ByVal bstrFileName As String, ByRef pulOSver As UInteger, ByRef pulPlatID As UInteger) Implements BBCFPCOMLib.ICFPGRSCOM.GetSFIOSVersionPlatID
End Sub
Public Function GetSupportedBands() As UInteger Implements BBCFPCOMLib.ICFPGRSCOM.GetSupportedBands
End Function
Public Function GetVendorID() As UShort Implements BBCFPCOMLib.ICFPGRSCOM.GetVendorID
End Function
Public Sub GetVersionOfAPPfile(ByVal bstrFileName As String, ByRef pbstrAPPversion As String, ByRef pbVersionValid As Boolean, ByRef pbstrAppNumber As String, ByRef pbNumberValid As Boolean) Implements BBCFPCOMLib.ICFPGRSCOM.GetVersionOfAPPfile
End Sub
Public Sub HeadInTheSandMode(ByVal bChangeMode As Boolean, ByRef pbHISMode As Boolean) Implements BBCFPCOMLib.ICFPGRSCOM.HeadInTheSandMode
End Sub
Public Sub InvokeMethod(ByVal bstrMethod As String, ByRef pulParam As UInteger, ByRef pbstrParam As String) Implements BBCFPCOMLib.ICFPGRSCOM.InvokeMethod
End Sub
Public Function IsDesktopRAMImage() As Boolean Implements BBCFPCOMLib.ICFPGRSCOM.IsDesktopRAMImage
End Function
Public Sub LoadBootrom(ByVal bstrFileName As String) Implements BBCFPCOMLib.ICFPGRSCOM.LoadBootrom
End Sub
Public Sub NukeDevice() Implements BBCFPCOMLib.ICFPGRSCOM.NukeDevice
End Sub
Public Sub PatriotConnectToTunnel() Implements BBCFPCOMLib.ICFPGRSCOM.PatriotConnectToTunnel
End Sub
Public Sub PatriotDisconnect() Implements BBCFPCOMLib.ICFPGRSCOM.PatriotDisconnect
End Sub
Public Sub PatriotGetInfo(ByRef pulPATver As UInteger, ByRef pulTunnelver As UInteger, ByRef pbBatteryVoltageOk As Boolean) Implements BBCFPCOMLib.ICFPGRSCOM.PatriotGetInfo
End Sub
Public Sub PatriotGetOSVersionOfFile(ByVal bstrFileName As String, ByRef pulOSver As UInteger) Implements BBCFPCOMLib.ICFPGRSCOM.PatriotGetOSVersionOfFile
End Sub
Public Function PatriotGetOSVersionOfFileStr(ByVal bstrFileName As String) As String Implements BBCFPCOMLib.ICFPGRSCOM.PatriotGetOSVersionOfFileStr
End Function
Public Function PatriotInBerbugMode() As Boolean Implements BBCFPCOMLib.ICFPGRSCOM.PatriotInBerbugMode
End Function
Public Sub PatriotLastLoadSuccessful(ByRef pbSuccess As Boolean) Implements BBCFPCOMLib.ICFPGRSCOM.PatriotLastLoadSuccessful
End Sub
Public Sub PatriotLoadImage(ByVal bstrFileName As String) Implements BBCFPCOMLib.ICFPGRSCOM.PatriotLoadImage
End Sub
Public Sub ReloadFileSystem(ByVal bstrFileName As String) Implements BBCFPCOMLib.ICFPGRSCOM.ReloadFileSystem
End Sub
Public Sub ReloadOS(ByVal bstrFileName As String) Implements BBCFPCOMLib.ICFPGRSCOM.ReloadOS
End Sub
Public Sub ReloadPlantImage(ByVal bstrFileName As String) Implements BBCFPCOMLib.ICFPGRSCOM.ReloadPlantImage
End Sub
Public Sub ReloadPlantImageWithPatriot(ByVal bstrFileName As String) Implements BBCFPCOMLib.ICFPGRSCOM.ReloadPlantImageWithPatriot
End Sub
Public Sub ResetPatriot() Implements BBCFPCOMLib.ICFPGRSCOM.ResetPatriot
End Sub
Public Sub SaveFileSystem(ByVal bstrFileName As String, ByVal bVerifyToAPP As Boolean) Implements BBCFPCOMLib.ICFPGRSCOM.SaveFileSystem
End Sub
Public Sub SetConnectValues(ByVal nMaxTimeoutMs As Integer, ByVal bIncremental As Boolean) Implements BBCFPCOMLib.ICFPGRSCOM.SetConnectValues
End Sub
Public Sub SetMassStorage(ByVal nOn As Integer) Implements BBCFPCOMLib.ICFPGRSCOM.SetMassStorage
End Sub
Public Sub SuperNukeDevice() Implements BBCFPCOMLib.ICFPGRSCOM.SuperNukeDevice
End Sub
Public Sub ToastDevice(ByVal bstrPassword As String) Implements BBCFPCOMLib.ICFPGRSCOM.ToastDevice
End Sub
Public Sub WhoAmI(ByVal bstrWhoAmI As String) Implements BBCFPCOMLib.ICFPGRSCOM.WhoAmI
End Sub
Public Sub Wipe(ByVal bWipeOS As Boolean) Implements BBCFPCOMLib.ICFPGRSCOM.Wipe
End Sub
End Class
todas esas funciones son las que tiene la dll dentro, no las escribi yo, me las detecto y escribio automaticamente el visual studio cuando implemente de BBCFPCOMLib.CFPGRSCOM
saludos.
Hola, gracias por tu respuesta pero por alguna razon no me esta haciendo nada el programa, es decir, no hace ninguna funcion ni lanza ningun errror
Cita de: e-spy en 12 Marzo 2011, 07:05 AM
Hola, gracias por tu respuesta pero por alguna razon no me esta haciendo nada el programa, es decir, no hace ninguna funcion ni lanza ningun errror
Porque esta implementando la interfaz, en una clase vacia, fijate la documentacion de la libreria haber que tienes que hacer en cada evento
Buenos dias, como dije anteriormente dicha libreria no es mia, lo que pude analizar es lo siguiente:
//BBCFPCOM 1.0 Type Library
//Version: 1.0
BBCFPCOMLib;
GUID = {C2CFDD51-0603-4889-9FF5-B943AA46118B};
Enum CFP_TYPE;
CFP_TYPE_NORMAL = 0;
CFP_TYPE_PATRIOT = 1;
CFP_TYPE_EDW = 2;
CFP_TYPE_RMA = 3;
CFP_TYPE_STP = 4;
CFP_TYPE_BRL = 5;
//ICFPEvents Interface
Interface _ICFPEvents;
GUID = {E219CDC3-58B9-4FF5-BC61-6295E378208E};
//method OnProgress
function OnProgress(bstrCode: BSTR; nPercent: I4; ulExtraInfo: UI4): HResult; stdcall;
//method OnDebugMessage
function OnDebugMessage(nLogLevel: I4; bstrMessage: BSTR): HResult; stdcall;
//method OnNeedPassword
function OnNeedPassword(nTriesRemaining: I4; out password: ^BSTR): HResult; stdcall;
//CFPGRSCOM Class
CoClass CFPGRSCOM;
GUID = {3B5626A7-724D-4F17-A980-002FDC26B567};
//BBCFPCOM 1.0 Type Library
Interface ICFPGRSCOM;
GUID = {33CF20BC-B452-4529-B78E-B48E821AF3A8};
//Connect via COM port
function Connect(nComport: I4; nConnectBaudRate: I4; nMaxTimeoutMs: I4; nResetTimeOusMs: I4): HResult; stdcall;
//Connect to Any USB device found
function ConnectAnyUSB(nMaxTimeoutMs: I4; nResetTimeOutMs: I4): HResult; stdcall;
//Connect USB device using a specific property
function ConnectUSB(bstrProperty: BSTR; bstrValue: BSTR; nMaxTimeoutMs: I4; nResetTimoeOutMs: I4): HResult; stdcall;
//method ConnectToBootImage
function ConnectToBootImage: HResult; stdcall;
//method ConnectToBootrom
function ConnectToBootrom: HResult; stdcall;
//ReloadPlantImage - SFI
function ReloadPlantImage(bstrFileName: BSTR): HResult; stdcall;
//ReloadPlantImageWithPatriot - MFI
function ReloadPlantImageWithPatriot(bstrFileName: BSTR): HResult; stdcall;
//method ReloadFileSystem
function ReloadFileSystem(bstrFileName: BSTR): HResult; stdcall;
//method SaveFileSystem
function SaveFileSystem(bstrFileName: BSTR; bVerifyToAPP: Bool): HResult; stdcall;
//Terminate all interfaces
function Disconnect: HResult; stdcall;
//Signal any in-process commands to abort
function Abort: HResult; stdcall;
//method GetCFPVersion
function GetCFPVersion(out pulCFPver: ^UI4): HResult; stdcall;
//method GetBootromInfo
function GetBootromInfo(out pulBRver: ^UI4; out pbSecurityEnabled: ^Bool): HResult; stdcall;
//method PatriotConnectToTunnel
function PatriotConnectToTunnel: HResult; stdcall;
//method PatriotGetInfo
function PatriotGetInfo(out pulPATver: ^UI4; out pulTunnelver: ^UI4; out pbBatteryVoltageOk: ^Bool): HResult; stdcall;
//method PatriotDisconnect
function PatriotDisconnect: HResult; stdcall;
//method PatriotLastLoadSuccessful
function PatriotLastLoadSuccessful(out pbSuccess: ^Bool): HResult; stdcall;
//method PatriotLoadImage
function PatriotLoadImage(bstrFileName: BSTR): HResult; stdcall;
//method PatriotGetOSVersionOfFile
function PatriotGetOSVersionOfFile(bstrFileName: BSTR; out pulOSver: ^UI4): HResult; stdcall;
//method GetOSVersionOfSFI
function GetOSVersionOfSFI(bstrFileName: BSTR; out pulOSver: ^UI4): HResult; stdcall;
//method GetCOMBuildVersion
function GetCOMBuildVersion(out pbstrVersion: ^BSTR): HResult; stdcall;
//method ReloadOS
function ReloadOS(bstrFileName: BSTR): HResult; stdcall;
//Erase files and OS
function Wipe(bWipeOS: Bool): HResult; stdcall;
//Erase files/OS and passwords
function NukeDevice: HResult; stdcall;
//Erase the Appstore
function SuperNukeDevice: HResult; stdcall;
//Toast the device
function ToastDevice(bstrPassword: BSTR): HResult; stdcall;
//method HeadInTheSandMode
function HeadInTheSandMode(bChangeMode: Bool; out pbHISMode: ^Bool): HResult; stdcall;
//method GetFlashSizeInBytes
function GetFlashSizeInBytes(out pulFlashSizeBytes: ^UI4): HResult; stdcall;
//method GetPlatformID
function GetPlatformID(out pulPID: ^UI4; out pbstrDeviceString: ^BSTR): HResult; stdcall;
//method GetVendorID
function GetVendorID(out pnVendorID: ^UI2): HResult; stdcall;
//method GetSFIOSVersionPlatID
function GetSFIOSVersionPlatID(bstrFileName: BSTR; out pulOSver: ^UI4; out pulPlatID: ^UI4): HResult; stdcall;
//method GetVersionOfAPPfile
function GetVersionOfAPPfile(bstrFileName: BSTR; out pbstrAPPversion: ^BSTR; out pbVersionValid: ^Bool; out pbstrAppNumber: ^BSTR; out pbNumberValid: ^Bool): HResult; stdcall;
//method GetSupportedBands
function GetSupportedBands(out pulBands: ^UI4): HResult; stdcall;
//method GetCOMBuildVersionID
function GetCOMBuildVersionID(out pulVersion: ^UI4): HResult; stdcall;
//Invoke a custom method
function InvokeMethod(bstrMethod: BSTR; out pulParam: ^UI4; out pbstrParam: ^BSTR): HResult; stdcall;
//property ConnectType
property-get ConnectType(out pVal: ^CFP_TYPE): HResult; stdcall;
//property ConnectType
property-put ConnectType(pVal: CFP_TYPE): HResult; stdcall;
//method GetPatriotVersion
function GetPatriotVersion(out pbstrPatVersion: ^BSTR): HResult; stdcall;
//method PatriotGetOSVersionOfFileStr
function PatriotGetOSVersionOfFileStr(bstrFileName: BSTR; out pbstrPatVer: ^BSTR): HResult; stdcall;
//method PatriotInBerbugMode
function PatriotInBerbugMode(out pbBerbugMode: ^Bool): HResult; stdcall;
//method SetConnectValues
function SetConnectValues(nMaxTimeoutMs: I4; bIncremental: Bool): HResult; stdcall;
//method GetOSVersionOfSFIEx
function GetOSVersionOfSFIEx(bstrFileName: BSTR; out pulOSver: ^UI4; out pbstrOSver: ^BSTR): HResult; stdcall;
//method ResetPatriot
function ResetPatriot: HResult; stdcall;
//method WhoAmI
function WhoAmI(bstrWhoAmI: BSTR): HResult; stdcall;
//Load Bootrom Binary
function LoadBootrom(bstrFileName: BSTR): HResult; stdcall;
//MassStorage
function SetMassStorage(nOn: I4): HResult; stdcall;
No tengo mas informacion de dicha libreria. Ya un companero lo pudo hacer funcionar en Linux en C++, como podria obtener yo que funciones hace cada funcion???
Despues de indagar, y ver muchos comentarios de que no se puede obtener el source que se ejecuta en cada evento, me dijeron que si se posia pero en assembler, es decir, se puede programar en Assembler "orientado a objetos", gracias a Ildasm.exe me explico.
ildasm, desensambla tu dll o ejecutable, te genera código ensamblador (CIL), puedes modificar el código, agregar o quitar instrucciones, y enseguida con ilasm volver a generar el ejecutable con los cambios realizados. Son herramientas que proporciona el Visual Studio y Mono, ni siquiera tienes que descargar otros programas, más que el propio framework
Entonces segun me dicen con el Ilsdam se puede ver lo que hace cada funcion en ensamblador y se puede agregar eso en VB.NET???
Por favor confirmenme esa teoria? de todas maneras ya estoy descargando .NT Framework 4 (que es dodne viene incluido Ildasm.exe)
Listo el Ildasm me hizo el volcado de lA DLL y me dio lo siguiente
// Muchas lineas de codigo borradas
--------------------- EDITADO-------------
Disculpen por poner tanto codigo, subi el TXT a mi server. para verlo click aqui:
http://www.mysistemas.com/volcado2.txt
Listo el Ildasm me hizo el volcado de lA DLL y me dio lo siguiente
// Muchas lineas de codigo borradas
--------------------- EDITADO-------------
Disculpen por poner tanto codigo, subi el TXT a mi server. para verlo click aqui:
http://www.mysistemas.com/volcado2.txt
No hay ninguna manera???