elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación Visual Basic / Re: Dll creada en C (No C++) no se puede acceder desde Visual Basic 6. en: 24 Mayo 2012, 00:07 am
Probe con el Dependency Walker y me mostro las funciones de la misma manera que antes las habia visto en el alternate dll analyzer.

Definitivamente debe haberse exportado de una forma que no las puedo utilizar.

Gracias a todos por su apoyo.
2  Programación / Programación Visual Basic / Re: Dll creada en C (No C++) no se puede acceder desde Visual Basic 6. en: 23 Mayo 2012, 23:34 pm
Probé quitandole la ruta y generando un ejecutable en VB6 pero nada sigue saliendo el mismo error de no encontrar el archivo.

Como mencione antes con un analizador de DLLs me muestra lo siguiente

_CPSC1900AbortCommand@0
_CPSC1900AcceptCard@4
_CPSC1900BeginDownProcess@24
_CPSC1900ChipcardMoveTO@4

es decir, con los caracteres "raros" que no reconoce el VB6 en la declaración, quizás por eso no puedo utilizar la dll, porque como me dices están exportadas como cdecl y no como stdcall.

Tendré que ponerme en contacto con el proveedor para indicarle que verifiquen la forma en que exportaron la dll.

Gracias por tu apoyo.
3  Programación / Programación Visual Basic / Re: Dll creada en C (No C++) no se puede acceder desde Visual Basic 6. en: 23 Mayo 2012, 23:02 pm
Acabo de probarlo y nada, sigue apareciendo el mensaje que no encontró el archivo.

Lo raro es que pude verificar con el programa alternative dll analizer que si existen funciones dentro de la dll. Aqui el listado que me devuelve el programa...

_CPSC1900AbortCommand@0
_CPSC1900AcceptCard@4
_CPSC1900BeginDownProcess@24
_CPSC1900ChipcardMoveTO@4
_CPSC1900CleaningCardProcess@0
_CPSC1900Connect@8
_CPSC1900CountTray@8
_CPSC1900DeviceIdentify@8
_CPSC1900DeviceReset@0
_CPSC1900DeviceStatus@24
_CPSC1900DiaAllSensorStatus@4
_CPSC1900DiaGetEncoderStrobeData@12
_CPSC1900DiaGetEncoderT1Data@12
_CPSC1900DiaGetEncoderT2Data@12
_CPSC1900DiaGetEncoderT3Data@12
_CPSC1900DiaPowerOFFStepperMotors@0
_CPSC1900DiaRunWithoutCard@4
_CPSC1900DiaSensorStatus@8
_CPSC1900DiaSingleReset@4
_CPSC1900DiaSwitchToDiagnosticMode@4

Y en el visual basic 6 al definir la función "_CPSC1900Connect@8" no me soporta ni el caracter "_" que está delante de la función, ni el caracter "@" porque me indica que debe ir la instrucción "lib". asi que tengo que definirla como "CPSC1900Connect"

Que problema... ojala alguien pudiera ayudarme a resolverlo.
4  Programación / Programación Visual Basic / Re: Dll creada en C (No C++) no se puede acceder desde Visual Basic 6. en: 23 Mayo 2012, 22:31 pm
Gracias por la respuesta MCKSys Argentina. Mira este es parte del código que encontré en el archivo .h que me entregaron. Por lo que veo las funciones están exportadas y declaradas como __stdcall. Y con este archivo y con el .lib genero una nueva dll desde un proyecto en microsoft visual c++ pero nada, no la echo a andar desde visual 6....

Respecto a hacer un wrapper, ahi si no comento porque no tengo la mínima idea de como hacerlo, es como decirte que me estuvieras hablando en chino mandarin... jeje... Gracias de todas maneras por tu tiempo.
Código:
////////////////////////////////////////////////////////////////////////////////
// Exported Functions
////////////////////////////////////////////////////////////////////////////////

// Connection
CPSC1900DllExport BYTE __stdcall CPSC1900Connect(BYTE port, void *param);
CPSC1900DllExport BYTE __stdcall CPSC1900Disconnect(void);

// Command Control
//Demo Card
CPSC1900DllExport BYTE __stdcall CPSC1900MakeDemoCard(BOOL withMagStripe);
//Status and Reset
CPSC1900DllExport BYTE __stdcall CPSC1900DeviceReset(void);
CPSC1900DllExport BYTE __stdcall CPSC1900DeviceStatus(BYTE moduleID,
BYTE *p1, BYTE *p2, BYTE *p3, BYTE *p4, BYTE *p5);
CPSC1900DllExport BYTE __stdcall CPSC1900DeviceIdentify(BYTE moduleID,
BYTE *identify);
CPSC1900DllExport BYTE __stdcall CPSC1900ReadCounters(
LPSTCARDCOUNTER stCardCounters);
CPSC1900DllExport BYTE __stdcall CPSC1900ResetCounters(
BYTE *password);
CPSC1900DllExport BYTE __stdcall CPSC1900ReadEncoderTrackStatus(BYTE *t1RC,
BYTE *t2RC, BYTE *t3RC);
//Feeder [I/O Card]
CPSC1900DllExport BYTE __stdcall CPSC1900FeedCard(void);
CPSC1900DllExport BYTE __stdcall CPSC1900RejectCard(BYTE rejectTO);
CPSC1900DllExport BYTE __stdcall CPSC1900EjectCard(BYTE ejectTO);
//ChipCard
CPSC1900DllExport BYTE __stdcall CPSC1900ChipcardMoveTO(BYTE chipCardFormat);
//Embosser
CPSC1900DllExport BYTE __stdcall CPSC1900EmbosserCleanLineData(void);
CPSC1900DllExport BYTE __stdcall CPSC1900EmbosserDownloadLineData(
LPSTEMBOSSERLINEDATA stEmbosserLineData);
CPSC1900DllExport BYTE __stdcall CPSC1900EmbosserEmbossLines(BOOL postTopper);
//Encoder
CPSC1900DllExport BYTE __stdcall CPSC1900EncoderDownloadData(
LPSTENCODERDATA stEncoderData);
CPSC1900DllExport BYTE __stdcall CPSC1900EncoderWriteTracks(void);
CPSC1900DllExport BYTE __stdcall CPSC1900EncoderReadTracks(BYTE t3Mode,
LPSTENCODERREADTRACK stEncoderReadTrack);
//Topper
CPSC1900DllExport BYTE __stdcall CPSC1900TopperPressCard(BOOL waitTempReady,
BYTE secondToWait);
CPSC1900DllExport BYTE __stdcall CPSC1900TopperDetectTemp(BYTE *temperature);
CPSC1900DllExport BYTE __stdcall CPSC1900TopperSelectRibbon(BYTE ribbon);
// Setup
//SerialNumber
CPSC1900DllExport BYTE __stdcall
CPSC1900SETUPMasterSetSerialNumber(BYTE *serialNumber, BYTE *macAddress);
CPSC1900DllExport BYTE __stdcall
CPSC1900SETUPMasterGetSerialNumber(BYTE *serialNumber, BYTE *macAddress);
//ChipCard
CPSC1900DllExport BYTE __stdcall
CPSC1900SETUPChipcardSetContactPosition(WORD offsetX, WORD offsetY);
CPSC1900DllExport BYTE __stdcall
CPSC1900SETUPChipcardGetContactPosition(WORD *offsetX, WORD *offsetY);
//Topping
5  Programación / Programación Visual Basic / Re: Dll creada en C (No C++) no se puede acceder desde Visual Basic 6. en: 23 Mayo 2012, 22:03 pm
Raúl, Imagino, que para declarar las funciones como exportadas debo de volver a generar la dll pero desde los fuentes, correcto?

Porque yo tengo un archivo .lib y como digo intenté generando una nueva dll a partir de ese archivo y el archivo de cabecera que me entregaron pero nada.

Gracias Bulld0z3r también por tu respuesta.

Saludos.
6  Programación / Programación Visual Basic / Dll creada en C (No C++) no se puede acceder desde Visual Basic 6. en: 23 Mayo 2012, 19:16 pm
23.05.2012. Buenos días, Tengo el siguiente problema, que espero me puedan ayudar a solucionar.

Un proveedor nos ha hecho llegar una dll que según me indican esta generada en C, no C++ ni C#, sucede que al querer referenciarla desde el Visual Basic me bota el siguiente error: "No se puede agregar una referencia al archivo especificado" y esto entiendo es por que seguramente esta dll no es un componente COM.

Pensé que quizás la dll podría estar dañada, por lo que utilicé un archivo .lib y un .h que me vino en un archivo .ZIP junto con la dll, cree un proyecto en C++ y logre generar una nueva DLL sin problemas, el tema está en que al querer utilizarla referenciandola como una API me da el error: 53 en tiempo de ejecución: No se ha encontrado el archivo Dataprint.dll", a pesar de que le he puesto la ruta completa donde se encuentra el archivo y que también lo he copiado en c:\Windows\System.


Private Declare Function CPSC1900Connect Lib "d:\Imprimir\DataPrint.dll" Alias "CPSC1900Connect@8" (ByVal port As Byte, ByVal param As String)

Ahora ya no se que mas hacer  para poder utilizar las funciones de la dll, favor espero su ayuda con algún dato que me pueda ayudar a solucionar este inconveniente.

Saludos.


Ah me olvide indicar que esto lo he probado con S.O Windows XP y también sobre Windows 7.

Gracias por su apoyo.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines