Converter Delphi para C++ Builder

Programação C em geral

Moderadores: 51, guest2003

Converter Delphi para C++ Builder

Mensagempor Kleber » 30 Abr 2007 09:42

Tenho este programa que utiliza um botão e um Edit e esta na ling Delphi ou Pascal, como converto isso para C++ Builder?

Var
Fomr1: TForm1;
Saída: Integer;

Implementation

{Definição das funções da DLL.}

Function inportb(EndPorta: Integer) BYTE stdcall; external ‘inpout32.dll’ name ‘Inp32’
Procedure outportb(EndPorta:Integer; Valor:BYTE); stdcall; external ‘inpout32.dll’ name ‘Out32’;

Procedure TForm1.Button1Click(Sender:TObject);
Begin
Begin
If edit1.text = ‘ ‘then
Begin
Exit;
End
Else
Saida:=StrToInt(edit1.text);
Outportb($378,saida);
End;
End;
End.

Quem puder ajudar, agradeço.
Kleber
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Re: Converter Delphi para C++ Builder

Mensagempor Jorge_Francisco » 30 Abr 2007 10:10

Faço assim:

Código: Selecionar todos
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//Declaração dos ponteiros para função.
typedef short _stdcall (*PtrInp)(short EndPorta);
typedef void _stdcall (*PtrOut)(short EndPorta, short datum);

HINSTANCE hLib; //Instância para a DLL inpout32.dll.
PtrInp inportB;     //Instância para a função Imp32().
PtrOut outportB;  //Instância para a função Out32().

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   //Carrega a DLL na memória.
   hLib = LoadLibrary("inpout32.dll");

   if(hLib == NULL)
   {
      ShowMessage("Erro. O arquivo inpout32.DLL não foi encontrado.");
      Application->Terminate();
   }

   //Obtém o endereço da função Inp32 contida na DLL.
   inportB = (PtrInp) GetProcAddress(hLib, "Inp32");
   if(inportB == NULL)
   {
      ShowMessage("Erro. Erro ao endereçar a função Inp32.");
      Application->Terminate();
   }

   //Obtém o endereço da função Out32 contida na DLL.
   outportB = (PtrOut) GetProcAddress(hLib, "Out32");
   if(outportB == NULL)
   {
      ShowMessage("Erro. Erro ao endereçar a função Out32.");
      Application->Terminate();
   }   
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
   FreeLibrary(hLib); //Libera memória alocada pela DLL   
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if(StrToInt(Edit1->Text) <=255)
   {
   outportB(0x378,StrToInt(Edit1->Text));
   }
}
//---------------------------------------------------------------------------


Tem alguns codigo a mais para verificar se a dll está presente!!
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Re: Converter Delphi para C++ Builder

Mensagempor Kleber » 30 Abr 2007 10:19

É impressão ou o programa em Delphi parece ser mais "limpo"?
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Re: Converter Delphi para C++ Builder

Mensagempor Jorge_Francisco » 30 Abr 2007 10:53

Kleber escreveu:É impressão ou o programa em Delphi parece ser mais "limpo"?


É só impressão,como escrevi anteriormente o codigo que está em:


void __fastcall TForm1::FormCreate(TObject *Sender)


não é necessário,só o coloco para garantir que a DLL está presente.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Re: Converter Delphi para C++ Builder

Mensagempor Wagner de Queiroz » 30 Abr 2007 11:46

Kleber escreveu:É impressão ou o programa em Delphi parece ser mais "limpo"?


Não é impressão não, voce esta certo. Olhando o Código Delphi, fica parecendo uma poesia !

Ao contrario do C que parece formula matemática /Quimica

Eu havia comprado o CBUilder3 e fui compilar um hello world, nossa ! um simples hellow word basicao chamou centenas de arquivos para compilar um executavel, e quase dois longos minutos para compilar.

No delphi nao mais que alguns segundos. (Em compensação o Executavel do C ficou menor) É o preço da beleza.

O C foi criado por um cientista
O Pascal foi criado por um professor para ensinar boas praticas de programação.


Olha que legal:

C++
Código: Selecionar todos
//Declaração dos ponteiros para função.
typedef short _stdcall (*PtrInp)(short EndPorta);
typedef void _stdcall (*PtrOut)(short EndPorta, short datum);

HINSTANCE hLib; //Instância para a DLL inpout32.dll.
PtrInp inportB;     //Instância para a função Imp32().
PtrOut outportB;  //Instância para a função Out32().


Delphi
Código: Selecionar todos
Function inportb(EndPorta: Integer) BYTE stdcall; external ‘inpout32.dll’ name ‘Inp32’
Procedure outportb(EndPorta:Integer; Valor:BYTE); stdcall; external ‘inpout32.dll’ name ‘Out32’;


E olha que o Delphi ja carrega as DLLs sem pedir.

Não to querendo comecar uma briga tá. Nao tenho nada contra C. Eu uso tb. mas minha opinião sincera, prefiro fazer quase tudo no Delphi pq depurar codigo é uma chatice em qualquer lugar, pelo menos o Delphi, as linhas sao mais bonitinhas e mais claras de se ler.

A vantagem do C é a portabilidade, não duvidem disso, mas Quando O Lazarus melhorar, a portabilidade do Delphi vai começar a engatinhar. Pena que o Lazarus gera executaveis gigantescos
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Re: Converter Delphi para C++ Builder

Mensagempor Jorge_Francisco » 30 Abr 2007 12:29

Alem da portabilidade do c++, escrever "Begin" e "end" não torna-se prático.Existem outras vantagens na forma "escrita" para agilizar a programação.

Outra coisa o codigo:

Código: Selecionar todos

Function inportb(EndPorta: Integer) BYTE stdcall; external ‘inpout32.dll’ name ‘Inp32’
Procedure outportb(EndPorta:Integer; Valor:BYTE); stdcall; external ‘inpout32.dll’ name ‘Out32’;



é a mesma coisa que:

Código: Selecionar todos

Function inportb(EndPorta: Integer) BYTE stdcall;

external ‘inpout32.dll’ name ‘Inp32’

Procedure outportb(EndPorta:Integer; Valor:BYTE);

stdcall;

external ‘inpout32.dll’ name ‘Out32’;




Então pergunto,qual a forma mais limpa?Sinceramente,é a mesma coisa!


Retificando: as funções dentro do Formcreate sao necessárias!
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor LUCK » 30 Abr 2007 13:48

Acho que se pegar meia dúzia de linhas isoladamente o código pode até ficar parecido.... mas se pegar o código inteiro, sem dúvida o Delphi (Pascal) é bem mais fácil de se ler.

É o que eu penso... :wink:

Um abraço
Avatar do usuário
LUCK
Byte
 
Mensagens: 109
Registrado em: 11 Out 2006 14:01

Re: Converter Delphi para C++ Builder

Mensagempor Wagner de Queiroz » 30 Abr 2007 13:55

Jorge_Francisco escreveu:Alem da portabilidade do c++, escrever "Begin" e "end" não torna-se prático...



Va lá. Apesar de economizar muitos bytes trocando o begin/end por "{ e }" O Código Pascal é realmente mais Bonito de se ver. Mesmo comparando com o VBasic. Para piorar a IDE do Delphi ja ajuda com um monte de atalho para escrever laços for, case, function, try/exept (Ta vendo ! Nem sei escrever mais por causa destes atalhos)

Agora a funcao em C o Jorge Mostrou é bem prefirivel do que o outro exemplo. O codigo fica mais amigavel.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor Kleber » 30 Abr 2007 15:38

Obrigado a todos pelas respostas!!!
Funcionou perfeitamente.
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Re: Converter Delphi para C++ Builder

Mensagempor andre_luis » 03 Mai 2007 09:56

Wagner de Queiroz escreveu:um simples hellow word basicao chamou centenas de arquivos para compilar um executavel, e quase dois longos minutos para compilar.


Parte disso talvez se explica pelo fato de que a Borland ao invéz de criar 2 compiladores independentes, eles reutilizam no C++Builder muito do que foi feito no Delphi. Até alguns exemplos do Help do Builder sao escritos em Pascal !!

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x