Tipo pChar
Bom primeiramente tenho que deseja um fiz ano novo a você,
bom tenho uma aplicação desenvolvida no Delphi 2007 e nela ultilizo muitas function que tem como paramentros tipos "pChar" que enviar direto para um dll, estou tentando problemas para migra esta versão para o delphi 2010 , você poderia me ajudar ou até mesmo me dar um dica de como converte ou ate mais quais são os novos tipos suportados separados por escala, outra pergunta andei pesquisando em alguns site e vi que é possivel criar um dll que chama outra dll para resolver este tipo de problema no delphi 2009/2010 isto e possivel?
Alexandro Oliveira
Curtidas 0
Respostas
Rodrigo Mourão
03/01/2010
Olá Amigo,
Bem a partir Delphi 2009 tivemos alterações significativas na estrutura da VCL para suportar unicode, mas essa alterações impactam muito pouco no que já existia isso porque a Embarcadero tomou o cuidade de fazer Casting Implicitos nos tipos strings.
Só precisaremos mexer nos nossos códigs quando trabalhamos com alocação dinâmica de char. O tipo Pchar é especifico do Windows entao quando usamos funções da API do Windows temos que passar os textos como Pchar, ou seja, ponteiros de char. Quando trabalhamos com DLL isso tambem e requerido uma vez que DLL são extensão de aplicativos windwos.
Agora para te ajudar eu preciso saber exatamente qual é o erro. Se puder me envia a DLL que esta consumindo e me mostre o código que você usa para poder invocar um método desta DLL que esta dando erro. Assim posso ver se consigo lhe ajudar.
Att,
Bem a partir Delphi 2009 tivemos alterações significativas na estrutura da VCL para suportar unicode, mas essa alterações impactam muito pouco no que já existia isso porque a Embarcadero tomou o cuidade de fazer Casting Implicitos nos tipos strings.
Só precisaremos mexer nos nossos códigs quando trabalhamos com alocação dinâmica de char. O tipo Pchar é especifico do Windows entao quando usamos funções da API do Windows temos que passar os textos como Pchar, ou seja, ponteiros de char. Quando trabalhamos com DLL isso tambem e requerido uma vez que DLL são extensão de aplicativos windwos.
Agora para te ajudar eu preciso saber exatamente qual é o erro. Se puder me envia a DLL que esta consumindo e me mostre o código que você usa para poder invocar um método desta DLL que esta dando erro. Assim posso ver se consigo lhe ajudar.
Att,
GOSTEI 0
Alexandro Oliveira
03/01/2010
Bom dia Rodrigo Primeiro tenho que lhe agradece por sua ajudar , muito obrigado! outra coisa so fiel escudeiro da suas videos Aulas que são feras ^^ , você muito bom no que faz parabéns.
Estou Enviado minha fontes Lib da Dll e meu comando que estou tentando usar no delphi 2010
(Obs.: no Delphi 2007 tudo funcionado redondo, se nenhum problema , mais delphi 2010 na vai nem com reza, todo isto simplesmente pela mudança que ouveram no pchar (T.T) )
Estou Enviado minha fontes Lib da Dll e meu comando que estou tentando usar no delphi 2010
(Obs.: no Delphi 2007 tudo funcionado redondo, se nenhum problema , mais delphi 2010 na vai nem com reza, todo isto simplesmente pela mudança que ouveram no pchar (T.T) )
GOSTEI 0
Alexandro Oliveira
03/01/2010
http://video.devmedia.com.br/discovirtual/175550/LibXPCOM32.rar
GOSTEI 0
Rodrigo Mourão
03/01/2010
Perfeito, vou testar e lhe informo !!!!
Abs!!!
Abs!!!
GOSTEI 0
Rodrigo Mourão
03/01/2010
Olá Amigo,
Desculpe a demora mas como vc me mandou so o .pas entao tive que criar um projeto e comentar algumas linhas onde vc fazx referencia a metodos que não estou disponiveis como e o caso do Log por exemplo.
Agora ja esta compilando tudo corretamente mas preciso testar e apra isso preciso da DLL, pode me enviar ???
Outra coisa: quais valores eu passo para o metodo EnviaCmd(Protocolo: String; nTerm,Serial:Integer;OnLine:TTimer): Integer;
Protocolo = ?????
nTerm = ?????
Serial = ?????
Online - Isso seria um componente TTimer, correto ? Com quantos milisegundos ??
Fico no aguardo !!!
Att,
Desculpe a demora mas como vc me mandou so o .pas entao tive que criar um projeto e comentar algumas linhas onde vc fazx referencia a metodos que não estou disponiveis como e o caso do Log por exemplo.
Agora ja esta compilando tudo corretamente mas preciso testar e apra isso preciso da DLL, pode me enviar ???
Outra coisa: quais valores eu passo para o metodo EnviaCmd(Protocolo: String; nTerm,Serial:Integer;OnLine:TTimer): Integer;
Protocolo = ?????
nTerm = ?????
Serial = ?????
Online - Isso seria um componente TTimer, correto ? Com quantos milisegundos ??
Fico no aguardo !!!
Att,
GOSTEI 0
Alexandro Oliveira
03/01/2010
Bom tarde amigo,
pelo que eu vi você deu uma olha na libcom32 verificou a quantidade e pchar que existe, são muito né?
todas elas foram desenvolvidas para controla um placa controlara,
O paramatros que você mecionou
nResult := XPnetmTxMsg(Serial,nTerm,RamProtocolo,nByte);
Serial = é o numero da Porta Serial do seu Computador Disponivel
nTerm = é o numero ID da placa Controladora (1 a 32)
RamProtocolo = '$SB' acionar o Relay da placa controladora
TTIMER = 1000
meu amigo acredito que você não consigar testar este codigo com perfeição pois na agora que você for adicionar o terminal o que é o ID da placa controladora vai lhe Retorna um erro, pois ela teria que esta presente ai com você conectar no seu pc para funcionar correntamente, ai você teria um noção real dos dados, não chegam com perfeição na placa controladora ou seja todos os comando que são tipos pchar não vai , mais isto so acontece no Delphi 2009/2010
eu fiquei sabem, que seu eu fizer uma fizer um dll que faz as conversão vai funcionar mais ai que é a questão teria que enviar o tipo de pchar que o delphi 2010 reconhece nesta dll e na dll converter os dados para o tipos suportado para esta dll que trata os comando da placa , mais as questão no tenho ideia como vou começar, estas conversões!
Outro coisa tenho que lhe contar este meu Sistema já esta funcionado (ai no Rio em Campo Frio)^^ e logo mais vai estar em outros lugares ai do Rio ^^.
E fico mais feliz ainda por ter você com meu consultor e professor . muito Obrigado Pela grande ajuda
At.Alex Oliveira
pelo que eu vi você deu uma olha na libcom32 verificou a quantidade e pchar que existe, são muito né?
todas elas foram desenvolvidas para controla um placa controlara,
O paramatros que você mecionou
nResult := XPnetmTxMsg(Serial,nTerm,RamProtocolo,nByte);
Serial = é o numero da Porta Serial do seu Computador Disponivel
nTerm = é o numero ID da placa Controladora (1 a 32)
RamProtocolo = '$SB' acionar o Relay da placa controladora
TTIMER = 1000
meu amigo acredito que você não consigar testar este codigo com perfeição pois na agora que você for adicionar o terminal o que é o ID da placa controladora vai lhe Retorna um erro, pois ela teria que esta presente ai com você conectar no seu pc para funcionar correntamente, ai você teria um noção real dos dados, não chegam com perfeição na placa controladora ou seja todos os comando que são tipos pchar não vai , mais isto so acontece no Delphi 2009/2010
eu fiquei sabem, que seu eu fizer uma fizer um dll que faz as conversão vai funcionar mais ai que é a questão teria que enviar o tipo de pchar que o delphi 2010 reconhece nesta dll e na dll converter os dados para o tipos suportado para esta dll que trata os comando da placa , mais as questão no tenho ideia como vou começar, estas conversões!
Outro coisa tenho que lhe contar este meu Sistema já esta funcionado (ai no Rio em Campo Frio)^^ e logo mais vai estar em outros lugares ai do Rio ^^.
E fico mais feliz ainda por ter você com meu consultor e professor . muito Obrigado Pela grande ajuda
At.Alex Oliveira
GOSTEI 0
Alexandro Oliveira
03/01/2010
http://video.devmedia.com.br/discovirtual/175550/XPCOM32.rar
Seguem em *.rar minha dll
At.Alex Oliveira
Seguem em *.rar minha dll
At.Alex Oliveira
GOSTEI 0
Rodrigo Mourão
03/01/2010
Olá Amigo,
Ainda estou trabalhando no seu chamado, peço a gentileza que aguarde mais um pouco.
Att,
Ainda estou trabalhando no seu chamado, peço a gentileza que aguarde mais um pouco.
Att,
GOSTEI 0
Rodrigo Mourão
03/01/2010
Olá ALexandro,
Bem eu verifiquei e tentei de todas as maneiras mas o que ocorre e o seguinte. A sua DLL, ou melhor o fabricante da sua DLL é que tinha que se atualizar ou atualizar os metodos para suportar unicode. Isso por que a assinatura da DLL e que tem que mudar e isso tem que ser feito dentro da DLL.
Um bom exemplo disso e a propria API do windows. Nela temos os metodos:
MessageBox()
ShellExecute()
ShellExecuteA()
MessageBoxA()
Os dois sao metodos comuns e ou outros dois sao metodos com suporte a unicode. Pra ter uma ideia eu uso Crystal Report e para isso uso um componente CRPE. Eu fui compilar no Delphi 2010 e simplesmente nao funcionava.Para minha sorte as DLL do crystal tem suporte a unicode entao foi so trocar a chamada dos metodos. EX:
de StartPrintJob para StarPrintJobW
de OpenPrintJob para OpenPrintJobW
E por ai vai.
Voce citou que viu na net algo que dizia para criar outra DLL, bem isso faz sentido sim mas eu nao consegui encontrar, se quiser me passar link posso dar uma olhada para tentar lhe ajudar mas nativamente, pelo que ue tentei e sua DLL que tinha quter suporte a unicode.
Estou as ordens.
Bem eu verifiquei e tentei de todas as maneiras mas o que ocorre e o seguinte. A sua DLL, ou melhor o fabricante da sua DLL é que tinha que se atualizar ou atualizar os metodos para suportar unicode. Isso por que a assinatura da DLL e que tem que mudar e isso tem que ser feito dentro da DLL.
Um bom exemplo disso e a propria API do windows. Nela temos os metodos:
MessageBox()
ShellExecute()
ShellExecuteA()
MessageBoxA()
Os dois sao metodos comuns e ou outros dois sao metodos com suporte a unicode. Pra ter uma ideia eu uso Crystal Report e para isso uso um componente CRPE. Eu fui compilar no Delphi 2010 e simplesmente nao funcionava.Para minha sorte as DLL do crystal tem suporte a unicode entao foi so trocar a chamada dos metodos. EX:
de StartPrintJob para StarPrintJobW
de OpenPrintJob para OpenPrintJobW
E por ai vai.
Voce citou que viu na net algo que dizia para criar outra DLL, bem isso faz sentido sim mas eu nao consegui encontrar, se quiser me passar link posso dar uma olhada para tentar lhe ajudar mas nativamente, pelo que ue tentei e sua DLL que tinha quter suporte a unicode.
Estou as ordens.
GOSTEI 0
Rodrigo Mourão
03/01/2010
Olá,
Podemos ajudar am algo mais?
Att,
GOSTEI 0
Alexandro Oliveira
03/01/2010
ola Rodrigo, depois de muito pensar acabei achando a solução pro meu problema, irei criar uma dll no delphi 2007 que vai fazer a ponte entre minha dll, como sei que os pchar do delphi 2007 são compativeis com a dll, farei um dll que so tenha referencias tipos string e integer e dentro desta dll tratarei e executarei o comando
Muito Obrigado mesmo pela atenção
At.: Alex Oliveira
Analista de Sistema
Muito Obrigado mesmo pela atenção
At.: Alex Oliveira
Analista de Sistema
GOSTEI 0