Ver Mensaje Individual
  #1  
Antiguo 22-11-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Reputación: 22
FGarcia Va por buen camino
Crear una DLL y depurar sus errores

Hola!
Aqui, como siempre con preguntas raras.

Como he mencionado en otros hilos uso la biblioteca TComPort para hacer mis interfaces seriales con delphi 7. Siempre la he usado con aplicaciones de windows y su interface grafica sin problemas pero...ahora necesito que el componente de comunicacion (ComPort) se encapsule en una DLL para ser usado desde otro programa (vb.net o c#). Ya he creado la DLL y esta me funciona sin problemas para configurar los ajustes del puerto, abrir y cerrar el puerto pero tengo problemas para almacenar y recuperar los ajustes configurados al puerto (Baudios, Bits, Paridad, Handshacking, etc) me aparece la clasica ventana de error.....

Explico:

ComPort posee una propiedad llamada StoreSettings la cual permite guardar los datos de configuracion si se han cambiado y otra llamada LoadSettings que nos permite recuperar los ultimos ajustes. Estos son guardados en un archivo INI o en el registro de windows segun seleccion.

Cita:
Storing and loading settings

Application can easily store and load serial port settings using StoreSettings and LoadSettings methods. Settings can be stored into configuration file or registry. StoredProps property determines which properties need to be stored.

Example (Registry)

begin
// store settings to registry(Almacena ajustes)
ComPort1.StoreSettings(stRegistry, '\HKEY_LOCAL_MACHINE\Software\ComPortTest');
// load settings (recupera ajustes)
ComPort1.LoadSettings(stRegistry, '\HKEY_LOCAL_MACHINE\Software\ComPortTest');
end;

Example (Configuration file)

begin
// store settings to configuration file (Almacena ajustes)
ComPort1.StoreSettings(stIniFile, 'c:\ComPortTest.ini');
// load settings (recupera ajustes)
ComPort1.LoadSettings(stIniFile, 'c:\ComPortTest.ini');
end;
Pues bien yo he hecho esto usando los INI:

Código Delphi [-]
//Un procedimiento para guardar los ajustes y que sera llamado desde la aplicacion que usa la DLL
 
procedure GuardarConfiguracion(archivo: PChar); stdCall;
begin
  PuertoS.StoreSettings(stIniFile, strPas(Archivo)); //nombre y ruta de tipo String
end;
 
//Un procedimiento para recuperar los ajustes y que sera llamado desde la aplicacion que usa la DLL
 
procedure CargarConfiguracion(archivo: PChar); stdCall;
begin
  PuertoS.LoadSettings(stIniFile, strPas(Archivo));
end;

Actualmente estoy probando desde delphi el uso de esta dll

Código Delphi [-]
//Para Guardar los ajustes
procedure TForm1.btnStoreCFGClick(Sender: TObject);
var
  Archivo: string;
begin
  Archivo := ExtractFilePath(ParamStr(0)) + 'CommCfg.ini';
  GuardarConfiguracion(pchar(Archivo));
end;
 
 
//Para Recuperar los ajustes
procedure TForm1.btnLoadCFGClick(Sender: TObject);
var
  Archivo: string;
begin
  Archivo := ExtractFilePath(ParamStr(0)) + 'CommCfg.ini';
  CargarConfiguracion(pchar(Archivo));
end;

Tambien segun el mensaje que aparece al iniciar una DLL

Código Delphi [-]
library comScale;
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }
 
uses
  ShareMem,
  SysUtils,
  Classes,
  Forms,
  Dialogs,
  CPort;
  
{$R *.res}

El mensaje de Horror:

Código Delphi [-]
---------------------------
Debugger Exception Notification
---------------------------
Project UsaComScale.exe raised exception class EComPort with message 'Failed to store settings'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------

 
//el otro mensaje a continuacion
 
---------------------------
Application Error
---------------------------
Exception EComPort in module ComScale.dll at 0006326E.
 

---------------------------
Aceptar   
---------------------------

¿Alguna sugerencia? Como siempre estoy abierto a todas las propuestas que sirvan para resolver esto. Gracias.
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
Responder Con Cita