Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2005
aleph aleph is offline
Miembro
 
Registrado: oct 2005
Ubicación: San cristobal-Tachira-Venezuela
Posts: 13
Poder: 0
aleph Va por buen camino
Dll+Builder? como?

Buenas.

Me encuentro trabajando en un proyecto de control y monitoreo usando para ello el puerto usb de mi computador; la cuestion es :
1. que necesito incluir las funciones de una dll que son las que se comunican con el puerto y no c como es que puedo accesar a ellas desde el builder ; tengo la dll y ademas un archivo .cpp con las descripciones de las funciones y todo pero Que hago con esto? he revisado los hilos del foro y he visto que Delphi puede comunicarse directamente a la api; pero no c nada de delphi; y el proyecto debe ser en builder .

2 los archivos son los que da la microchip para trabajar con PIC18f4550 con el cual ya tengo todo listo ; lo he probado con un programa de ejemplo que dan en otra pagina ( programado en delphi para mi pesar ) y funciona; dan el codigo fuente y todo; pero la api esta escrita en C Builder (ironico no?) he modificado el codigo del pic y puedo hacer que varias cosas distintas pero lo interesante queda dependiendo del programa en el PC ya que no puedo modificar este programa. sin alguien tiene alguna sugerencia.

4 los archivos son: mpusbapi.dll ;_mpusbapi.cpp; _mpusbapi.h


Muchisimas gracias de Antemano

Última edición por aleph fecha: 22-12-2005 a las 15:24:23.
Responder Con Cita
  #2  
Antiguo 22-12-2005
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
Estas de buenas:
Código:
#include <vcl.h>

#include <windows.h>

#include <string.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)

{

return 1;

}

extern "C"

{ struct caso

{ char Ced[50];

 int Lon;

};

void __declspec(dllexport) WINAPI LongitudCad(caso *Caso)

{ Caso->Lon=strlen(Caso->Ced);

}

}

este es el codigo de la DLL....y este es el codigo del cpp q la carga:
Código:
#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "string.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

const char DLL_PRUEBA[13] = "Longitud.dll";

struct caso

{ char Ced[50];

int Lon;

};

void __stdcall (*F)(caso *);

//------------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

{

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{ caso Caso;

HINSTANCE Handle = LoadLibrary(DLL_PRUEBA);

if( Handle)

{ F=(void (__stdcall *)(caso *))GetProcAddress(Handle,"LongitudCad");

if(!F)

return;

strcpy(Caso.Ced,Edit1->Text.c_str());

F(&Caso);

ShowMessage("Longitud: "+IntToStr(Caso.Lon)+" caracteres.");

}

}

este el el .h:
Código:
#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TButton *Button1;

TEdit *Edit1;

void __fastcall Button1Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #3  
Antiguo 26-12-2005
aleph aleph is offline
Miembro
 
Registrado: oct 2005
Ubicación: San cristobal-Tachira-Venezuela
Posts: 13
Poder: 0
aleph Va por buen camino
gracias ; pero tengo unas dudas; cuando la funcion tiene mas de un parametro como debo llamarla? agrego los parametros uno a continuacion del otro?. en el codigo aparece_:
F=(void (__stdcall *)(caso *))GetProcAddress(Handle,&quot;LongitudCad&quot;



no estoy muy claro; que hace F en el codigo:

F(&Caso);

otra cosa es que algunas de las funciones retornan un valor y no se que hacer en ese caso.
disculpa las molestias

Última edición por aleph fecha: 06-01-2006 a las 20:03:48.
Responder Con Cita
  #4  
Antiguo 27-12-2005
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
eres afortunado otra vez, era el ultimo vistazo q echaba a estos hilos :

F es un puntero a una función, alli se carga " por decirlo así " (Marteens tiene tiempo para explicarlo mejor) una referencia a ella, tal como ves en ese " F(&Caso) "
la linea " F=(void (__stdcall *)(caso *))GetProcAddress(Handle,"LongitudCad");
" dice q F referirá a una función q "nada devuelve (void)" q se llama "LongitudCad" y sera obtenida de la DLL cargada en Handle y q tiene como parámetro un puntero a una estructura de tipo "caso", si tiene mas paràmetros pues los agregas uno tras otro tanto en la DLL como en la linea anterior en la parte "(caso *,...)" y si devuelve valor sería " F=( tipo_de_valor (__stdcall... "

otra cosa..mosca con lo devuelto, es corto el tiempo para explicarlo todo...es mejor q devuelvas valores por parámetros usanso punteros o referencias por &
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #5  
Antiguo 29-12-2005
aleph aleph is offline
Miembro
 
Registrado: oct 2005
Ubicación: San cristobal-Tachira-Venezuela
Posts: 13
Poder: 0
aleph Va por buen camino
Voy a ver todo eso; si alguna ves vuelves a revisar este hilo te dejo por escrito las gracias; por tu tiempo y por darme una mano. GRACIAS
Responder Con Cita
  #6  
Antiguo 16-09-2006
aleph aleph is offline
Miembro
 
Registrado: oct 2005
Ubicación: San cristobal-Tachira-Venezuela
Posts: 13
Poder: 0
aleph Va por buen camino
Thumbs up gracias

perfecto aprendi mucho con lo que escribiste gracias todo funciona a la perfeccion, toco hacer unas cuantas cosillas mas pero la base fue lo mas importante despues de sto todo fue mas facil
Responder Con Cita
  #7  
Antiguo 17-11-2006
//xx\\ //xx\\ is offline
Registrado
 
Registrado: may 2006
Posts: 2
Poder: 0
//xx\\ Va por buen camino
Hola,

Aleph, estoy con un proyecto igual al tuyo.

Yo el tema de la comunicacion con la dll, la tengo resuelta, pero al pasar al codigo de delphi a c, algo tengo que haber hecho mal ya que no responde a las comunicaciones. Le estoy dando vueltas pero nada...

¿Has conseguido comunicarte con el pic?

Un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:53:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi