Página 1 de 1

Converter Delphi para C++ Builder

MensagemEnviado: 30 Abr 2007 09:42
por Kleber
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

Re: Converter Delphi para C++ Builder

MensagemEnviado: 30 Abr 2007 10:10
por Jorge_Francisco
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!!

Re: Converter Delphi para C++ Builder

MensagemEnviado: 30 Abr 2007 10:19
por Kleber
É impressão ou o programa em Delphi parece ser mais "limpo"?

Re: Converter Delphi para C++ Builder

MensagemEnviado: 30 Abr 2007 10:53
por Jorge_Francisco
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.

Re: Converter Delphi para C++ Builder

MensagemEnviado: 30 Abr 2007 11:46
por Wagner de Queiroz
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

Re: Converter Delphi para C++ Builder

MensagemEnviado: 30 Abr 2007 12:29
por Jorge_Francisco
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!

MensagemEnviado: 30 Abr 2007 13:48
por LUCK
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

Re: Converter Delphi para C++ Builder

MensagemEnviado: 30 Abr 2007 13:55
por Wagner de Queiroz
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.

MensagemEnviado: 30 Abr 2007 15:38
por Kleber
Obrigado a todos pelas respostas!!!
Funcionou perfeitamente.

Re: Converter Delphi para C++ Builder

MensagemEnviado: 03 Mai 2007 09:56
por andre_luis
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 !!

+++