Re: RES: [delphi-br] Criando DLL
Em Pascal realmente não, mas dá uma olhada na documentação do Delphi pois eles mudaram isso, afinal, uma string pura não poderia passar de 255 chars pois é o máximo que se consegue marcar na posição 0 da string. Não sei se você já tentou, mas no Delphi você passa desse ponto e não pode mais acessar a posição 0 da string para determinar o tamanho, como se podia fazer no Turbo Pascal! Campus [EMAIL PROTECTED] escreveu: Valfrid, acho que tu fez uma pequena confusão. Se não estou enganado em C as strings são Null terminated, mas Pascal não. - Original Message - From: Valfrid-Ly Silva Couto To: Sent: Wednesday, May 24, 2006 3:20 PM Subject: Re: RES: [delphi-br] Criando DLL Isso só funciona porque no Delphi, as Strings também tem como terminador o caracter #0 - Original Message - From: Rubem Nascimento da Rocha To: Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior To: Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes desta mensagem que não continham texto foram removidas] _ MSN Busca: fácil, rápido, direto ao ponto. http://search.msn.com.br -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos Valfrid-Ly Silva Couto [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] ICQ 15114646 - Yahoo! doce lar. Faça do Yahoo! sua homepage. [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM
Re: RES: [delphi-br] Criando DLL
Não encontrei na documentação do Delphi referência a string terminada com nulo. Se tu puder me indicar fico grato. Só encontrei que as LongString, que possuem no mínimo 4 bytes, são um ponteiro para a estrutura real da string. Nesse caso tu não tem essa limitação de comprimento do primeiro byte. Minha curiosidade é em função de certa vez que estava lendo sobre criação de UDFs para Interbase, se fazia nescessário a passagem de parâmetros com arrays de char, a única forma de construção de strings terminadas em nulo possível em Delphi, em consequencia do Pascal. - Original Message - From: Valfrid-Ly Silva Couto [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Thursday, May 25, 2006 9:09 AM Subject: Re: RES: [delphi-br] Criando DLL Em Pascal realmente não, mas dá uma olhada na documentação do Delphi pois eles mudaram isso, afinal, uma string pura não poderia passar de 255 chars pois é o máximo que se consegue marcar na posição 0 da string. Não sei se você já tentou, mas no Delphi você passa desse ponto e não pode mais acessar a posição 0 da string para determinar o tamanho, como se podia fazer no Turbo Pascal! Campus [EMAIL PROTECTED] escreveu: Valfrid, acho que tu fez uma pequena confusão. Se não estou enganado em C as strings são Null terminated, mas Pascal não. - Original Message - From: Valfrid-Ly Silva Couto To: Sent: Wednesday, May 24, 2006 3:20 PM Subject: Re: RES: [delphi-br] Criando DLL Isso só funciona porque no Delphi, as Strings também tem como terminador o caracter #0 - Original Message - From: Rubem Nascimento da Rocha To: Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior To: Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes desta mensagem que não
Re: RES: [delphi-br] Criando DLL
Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
Re: RES: [delphi-br] Criando DLL
No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
Re: RES: [delphi-br] Criando DLL
Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes desta mensagem que não continham texto foram removidas] _ MSN Busca: fácil, rápido, direto ao ponto. http://search.msn.com.br -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
Re: RES: [delphi-br] Criando DLL
Sim, como qquer chamada para API do Windows. - Original Message - From: Marcelo Alves [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:21 AM Subject: Re: RES: [delphi-br] Criando DLL No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
Re: RES: [delphi-br] Criando DLL
Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes desta mensagem que não continham texto foram removidas] _ MSN Busca: fácil, rápido, direto ao ponto. http://search.msn.com.br -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um
Re: RES: [delphi-br] Criando DLL
Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus [EMAIL PROTECTED] escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes
Re: RES: [delphi-br] Criando DLL
Legal, quer dizer então que eu utilizando o PChar, minha DLL se torna disponível para todos os tipos de linguagens, correto? Só mais uma dúvida, o PChar eu devo utilizar em todas as units do meu projeto DLL ou somente nas funções que serão exportadas Marcelo. Em 24/05/06, Jonatã Castelo Branco [EMAIL PROTECTED] escreveu: Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus [EMAIL PROTECTED] escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu
Re: RES: [delphi-br] Criando DLL
Sem dúvida, em Delphi também, com StrPCopy. - Original Message - From: Jonatã Castelo Branco [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 10:58 AM Subject: Re: RES: [delphi-br] Criando DLL Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus [EMAIL PROTECTED] escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço
Re: RES: [delphi-br] Criando DLL
Fica a teu criterio. Testa e ve o que eh melhor. --- Marcelo Alves [EMAIL PROTECTED] escreveu: - Legal, quer dizer então que eu utilizando o PChar, minha DLL se torna disponível para todos os tipos de linguagens, correto? Só mais uma dúvida, o PChar eu devo utilizar em todas as units do meu projeto DLL ou somente nas funções que serão exportadas Marcelo. Em 24/05/06, Jonatã Castelo Branco [EMAIL PROTECTED] escreveu: Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus [EMAIL PROTECTED] escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte
Re: RES: [delphi-br] Criando DLL
Onde eu usaria esse StrPCopy? Na DLL ou na na aplicação que chama a DLL? E quanto a segunda Pergunta que havia feito? Poderia me esclarecer? Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Sem dúvida, em Delphi também, com StrPCopy. - Original Message - From: Jonatã Castelo Branco [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 10:58 AM Subject: Re: RES: [delphi-br] Criando DLL Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus [EMAIL PROTECTED] escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o
Re: RES: [delphi-br] Criando DLL
Na aplicação que chama a função dentro da DLL veja o exemplo do help. var A: array[0..79] of Char; S: String; begin S := 'Honk if you know Blaise.'; SuaFuncaoDaDll( StrPCopy(A, S) ); end; StrPCopy popula o array e retorna o ponteiro para o mesmo. Acredito que dentro da DLL tu possa usar strings normais, nunca desenvolvi Dlls para te assegurar com certeza. - Original Message - From: Marcelo Alves [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 1:35 PM Subject: Re: RES: [delphi-br] Criando DLL Onde eu usaria esse StrPCopy? Na DLL ou na na aplicação que chama a DLL? E quanto a segunda Pergunta que havia feito? Poderia me esclarecer? Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Sem dúvida, em Delphi também, com StrPCopy. - Original Message - From: Jonatã Castelo Branco [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 10:58 AM Subject: Re: RES: [delphi-br] Criando DLL Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus [EMAIL PROTECTED] escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String
Re: RES: [delphi-br] Criando DLL
Cara eu fiz diferente e funcionou. Veja só: procedure TfrmPrincipal.btnGerarClick(Sender: TObject); var lServidor, lTipo: PChar ; begin if self.rbProducao.Checked then lServidor := 'PRODUCAO' else if self.rbHomologacao.Checked then lServidor := 'HOMOLOGACAO' else lServidor := 'TESTES'; if self.rbImportacao.Checked then lTipo := 'I' else lTipo := 'E' ; //GeraPDF( lServidor, PChar( self.edCliente.Text ), lTipo, PChar( self.edDiretorio.Text ), Pchar( self.edDataIni.Text ), PChar( self.edDataFim.Text ) ) ; No caso criei duas variáveis do tipo Pchar para alguns parâmetros que eu tinha que tratar e para os parâmetros que eu poderia passar direto pegando o valor de TEdit eu usei apenas PChar( Edit.Text ). Pelo que eu vi, dessa forma já converte para PChar. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Na aplicação que chama a função dentro da DLL veja o exemplo do help. var A: array[0..79] of Char; S: String; begin S := 'Honk if you know Blaise.'; SuaFuncaoDaDll( StrPCopy(A, S) ); end; StrPCopy popula o array e retorna o ponteiro para o mesmo. Acredito que dentro da DLL tu possa usar strings normais, nunca desenvolvi Dlls para te assegurar com certeza. - Original Message - From: Marcelo Alves [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 1:35 PM Subject: Re: RES: [delphi-br] Criando DLL Onde eu usaria esse StrPCopy? Na DLL ou na na aplicação que chama a DLL? E quanto a segunda Pergunta que havia feito? Poderia me esclarecer? Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Sem dúvida, em Delphi também, com StrPCopy. - Original Message - From: Jonatã Castelo Branco [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 10:58 AM Subject: Re: RES: [delphi-br] Criando DLL Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus [EMAIL PROTECTED] escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei
Re: RES: [delphi-br] Criando DLL
Ah, usando bem o conceito de ponteiros, de antes de existir a função PChar, pode-se usar também: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := @cDescricao[1] Isso só funciona porque no Delphi, as Strings também tem como terminador o caracter #0 Campus [EMAIL PROTECTED] escreveu: Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha To: Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior To: Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes desta mensagem que não continham texto foram removidas] _ MSN Busca: fácil, rápido, direto ao ponto. http://search.msn.com.br -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos Valfrid-Ly Silva
Re: RES: [delphi-br] Criando DLL
Funcionar funciona, mas vc está passando o endereço de uma literal, se depois chamada da função essa área de memória tiver sido alocada por outra coisa, o windows vai gerar um GPF. Sem falar que lServidor e lTipo são variáveis locais, ao término do procedimento btnGerarClick, ela será destruída. Se tu acessar o conteúdo dela dentro da Dll depois disso, tu vai ter um Access violation ou um GPF, o segundo mais provavelmente. Não esqueça que um Pchar é um ponteiro, não uma cópia de uma variavel. - Original Message - From: Marcelo Alves [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 2:39 PM Subject: Re: RES: [delphi-br] Criando DLL Cara eu fiz diferente e funcionou. Veja só: procedure TfrmPrincipal.btnGerarClick(Sender: TObject); var lServidor, lTipo: PChar ; begin if self.rbProducao.Checked then lServidor := 'PRODUCAO' else if self.rbHomologacao.Checked then lServidor := 'HOMOLOGACAO' else lServidor := 'TESTES'; if self.rbImportacao.Checked then lTipo := 'I' else lTipo := 'E' ; //GeraPDF( lServidor, PChar( self.edCliente.Text ), lTipo, PChar( self.edDiretorio.Text ), Pchar( self.edDataIni.Text ), PChar( self.edDataFim.Text ) ) ; No caso criei duas variáveis do tipo Pchar para alguns parâmetros que eu tinha que tratar e para os parâmetros que eu poderia passar direto pegando o valor de TEdit eu usei apenas PChar( Edit.Text ). Pelo que eu vi, dessa forma já converte para PChar. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Na aplicação que chama a função dentro da DLL veja o exemplo do help. var A: array[0..79] of Char; S: String; begin S := 'Honk if you know Blaise.'; SuaFuncaoDaDll( StrPCopy(A, S) ); end; StrPCopy popula o array e retorna o ponteiro para o mesmo. Acredito que dentro da DLL tu possa usar strings normais, nunca desenvolvi Dlls para te assegurar com certeza. - Original Message - From: Marcelo Alves [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 1:35 PM Subject: Re: RES: [delphi-br] Criando DLL Onde eu usaria esse StrPCopy? Na DLL ou na na aplicação que chama a DLL? E quanto a segunda Pergunta que havia feito? Poderia me esclarecer? Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Sem dúvida, em Delphi também, com StrPCopy. - Original Message - From: Jonatã Castelo Branco [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 10:58 AM Subject: Re: RES: [delphi-br] Criando DLL Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus [EMAIL PROTECTED] escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves [EMAIL PROTECTED] Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus [EMAIL PROTECTED] escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não
Re: RES: [delphi-br] Criando DLL
Toda variável é armazenada em algum lugar na memória, da forma que você fez, o Delphi simplesmente colocou o espaço na memória e depois atribuiu um endereço, uma vez que o tamanho e etc já são conhecidos. Se você vai trabalhar com variáveis que você não sabe o tamanho, a coisa é diferente!! Marcelo Alves [EMAIL PROTECTED] escreveu: Cara eu fiz diferente e funcionou. Veja só: procedure TfrmPrincipal.btnGerarClick(Sender: TObject); var lServidor, lTipo: PChar ; begin if self.rbProducao.Checked then lServidor := 'PRODUCAO' else if self.rbHomologacao.Checked then lServidor := 'HOMOLOGACAO' else lServidor := 'TESTES'; if self.rbImportacao.Checked then lTipo := 'I' else lTipo := 'E' ; //GeraPDF( lServidor, PChar( self.edCliente.Text ), lTipo, PChar( self.edDiretorio.Text ), Pchar( self.edDataIni.Text ), PChar( self.edDataFim.Text ) ) ; No caso criei duas variáveis do tipo Pchar para alguns parâmetros que eu tinha que tratar e para os parâmetros que eu poderia passar direto pegando o valor de TEdit eu usei apenas PChar( Edit.Text ). Pelo que eu vi, dessa forma já converte para PChar. Marcelo. Em 24/05/06, Campus escreveu: Na aplicação que chama a função dentro da DLL veja o exemplo do help. var A: array[0..79] of Char; S: String; begin S := 'Honk if you know Blaise.'; SuaFuncaoDaDll( StrPCopy(A, S) ); end; StrPCopy popula o array e retorna o ponteiro para o mesmo. Acredito que dentro da DLL tu possa usar strings normais, nunca desenvolvi Dlls para te assegurar com certeza. - Original Message - From: Marcelo Alves To: Sent: Wednesday, May 24, 2006 1:35 PM Subject: Re: RES: [delphi-br] Criando DLL Onde eu usaria esse StrPCopy? Na DLL ou na na aplicação que chama a DLL? E quanto a segunda Pergunta que havia feito? Poderia me esclarecer? Marcelo. Em 24/05/06, Campus escreveu: Sem dúvida, em Delphi também, com StrPCopy. - Original Message - From: Jonatã Castelo Branco To: Sent: Wednesday, May 24, 2006 10:58 AM Subject: Re: RES: [delphi-br] Criando DLL Então, acredito ser correto dizer que você deve utilizar uma variável com a mesma característica do PChar, uma vez que a dll pode ser utilizada em várias linguagens de programação. Por exemplo, não quero te confundir, mas se você utlizar tua dll em um compilador de C, a variável que você vai passar como parâmetro deve ser um char de n elemntos. No C, está é uma string com terminação nula. int main(void) { ... char Str[10]; // declarando variáveis. ... TuaFuncao(...,Str,...); // funcao da dll. ... } --- Campus escreveu: - Exatamente. Só tentei simplificar, quem nunca teve contato com linguagens como C tem dificuldade para entender o coneito de ponteiros. Apesar que mesmo em Clipper se usa esse conceito, mas a grande maioria dos programadores que que tenho contato desconhece essa facilidade, a passagem de parâmetros por referência. Marcelo, Pchar, não é um tipo de dado própriamente dito, é um ponteiro ele deve ser usado da seguinte forma: Var pDescricao: PChar cDescricao: String cDescricao := 'Rubem Nascimento da Rocha' pDescricao := PChar(cDescricao) pDescricao agora aponta para cDescricao, ou seja, contém o endereço de memória onde cDescricao está armazenado. O que se passa como parâmetro, é esse endereço e não o conteúdo de cDescricao. O problema começa quando se usa pDescricao := Pchar('Rubem Nascimento da Rocha') - Original Message - From: Rubem Nascimento da Rocha To: Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior To: Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL
Re: RES: [delphi-br] Criando DLL
Valfrid, acho que tu fez uma pequena confusão. Se não estou enganado em C as strings são Null terminated, mas Pascal não. - Original Message - From: Valfrid-Ly Silva Couto [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Wednesday, May 24, 2006 3:20 PM Subject: Re: RES: [delphi-br] Criando DLL Isso só funciona porque no Delphi, as Strings também tem como terminador o caracter #0 - Original Message - From: Rubem Nascimento da Rocha To: Sent: Wednesday, May 24, 2006 9:25 AM Subject: Re: RES: [delphi-br] Criando DLL Não necessariamente um array, mas PChar é um ponteiro para dados do tipo char. Sds. From: Marcelo Alves Reply-To: delphi-br@yahoogrupos.com.br To: delphi-br@yahoogrupos.com.br Subject: Re: RES: [delphi-br] Criando DLL Date: Wed, 24 May 2006 09:21:32 -0300 No caso então quem for usar a minha DLL precisar passar os parâmetros em PChar??? Essa DLL que estou desenvolvendo será usada em site em VB .NET. Marcelo. Em 24/05/06, Campus escreveu: Se não me engano, PChar é uma array de chars terminado por um caracter nulo, e o String não. Basicamente é o segunte: FILIPE em PChar = FILIPE#0. em String = 6FILIPE. O primeiro byte do string contém seu tamanho, por isso passar uma string como parâmetro para uma DLL pode congelar o Windows, uma vez que ele não encontra o fim da string, que é marcado pelo caracter nulo.. - Original Message - From: Filipe Belchior To: Sent: Tuesday, May 23, 2006 6:08 PM Subject: Re: RES: [delphi-br] Criando DLL Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- Marcelo A. Souza [As partes desta mensagem que não continham texto foram removidas] _ MSN Busca: fácil, rápido, direto ao ponto. http://search.msn.com.br -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos Valfrid-Ly Silva Couto [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] ICQ 15114646 - Yahoo! doce lar. Faça do Yahoo! sua homepage. [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu
Re: RES: [delphi-br] Criando DLL
Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
Re: RES: [delphi-br] Criando DLL
Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
RES: [delphi-br] Criando DLL
Felipe, Na minha DLL eu tenho uma unit uPrincipal da Classe Tform e uma outra uRelatorio que é um Report do tipo TQuickRep. Tenho a procedure principal que é a exportada para ser usada por um outro programa. Essa procedure chama uma outra procedure na unit uPrincipal que é onde estão meus componentes ADO e onde estava dando o erro inicial. Com as suas dicas resolvi o problema na uPrincipal. Bom, em um determinado momento eu tento renomear um caption no Report conforme a linha abaixo: Rep.lblPeriodo.Caption := 'Período...: ' + DataIni + ' a ' + DataFin ; Rep é o nome que dei o meu Report. Bom é nesse momento que recebo a mensagem de access violation. Acredito que por ser DLL tenha que instanciar algo, coisa que não preciso fazer em um projeto normal (exe). -- Marcelo A. Souza Marcello, Explicar sobre PChar, tecnicamente, eu não sei, rs.. ..mas acontece o seguinte, usando string vc tem resultado dos métodos todo errado! agora, sobre o form do report, vc falou pouco sobre como vc esta fazendo. mostre como vc ta fazendo. --- Em delphi-br@yahoogrupos.com.br, marcelloassouza [EMAIL PROTECTED] escreveu Felipe, Primeiramente, obrigado pela resposta, você não sabe o quanto me ajudou, você e os outros amigos do grupo. Agora me diga uma coisa, no primeiro form o problema foi resolvido, agora estou com problemas quando ao outro que no Caso é um Report. Quando uso o Report num projeto comum, ele funciona normal ao chamar qualquer obejto do mesmo, mas agora num DLL, estou recebendo a mesma mensagem de access violation. Tenho que instacia-lo ou fazer alguma chamada diferenciada para poder utilizá-lo na minha DLL??? Outra coisa, porque Pchar ao invés de String? Só para conhecimento!!! Marcelo. --- Em delphi-br@yahoogrupos.com.br, Filipe Belchior [EMAIL PROTECTED] escreveu ..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu! [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
RES: [delphi-br] Criando DLL
Será que ninguém pode me ajudar??? Marcelo. -Mensagem original- De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Marcelo Alves de Souza Enviada em: segunda-feira, 22 de maio de 2006 12:26 Para: delphi-br@yahoogrupos.com.br Assunto: [delphi-br] Criando DLL Pessoal, Preciso criar uma DLL que se conecta a uma base SQL Server e gere um Relatório em PDF. Eu sei como fazer tudo isso, esse não é o problema, o que está me faltando mesmo é um pouco de conhecimento referente a parte de DLL's mesmo. Seguinte: Criei o meu projeto DLL conforme abaixo: library minhadll; uses SysUtils, Classes, uPrincipal in 'uPrincipal.pas' {frmPrincipal}, uRelatorio in 'uRelatorio.pas' {Rep: TQuickRep}; {$R *.res} Procedure GeraPDF( Servidor, Tipo: String ); stdcall; begin frmPrincipal.GeraRelatorio( Servidor, Tipo ); end; exports GeraPDF; end. Como vocês podem ver tenho duas Units no meu projeto. Uma é somente um form para eu colocar os componentes que necessito, no Caso o ADOConnection, ADOQuery e um outro que uso para exportar para PDF. A outra unit é um Report. Ao debugar bem na linha abaixo: frmPrincipal.GeraRelatorio( Servidor, Cliente, Tipo, Dir, DataIni, DataFim ); recebo um erro de access violation. Como as minhas ações estão no form frmPrincipal e o erro acontece justamente ao chamar algo que está nele, percebi que estava faltando eu criar o form. Aí tentei de todos os jeitos e não consegui. O que está faltando eu declarar para que eu possa utilizar o form frmPrincipal. Para criar o frmPrincipal tentei um dos dois códigos abaixo: Forma 1: Application.CreateForm( TfrmPrincipal, frmPrincipal ) ; Forma 2: If frmPrincipal = Nil Then frmPrincipal := TfrmPrincipal.Create( Self ) ; Poderiam me ajudar Att, Marcelo A. Souza -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
RES: [delphi-br] Criando DLL
..outra coisa, no caso, vc ta usando ADO, já vou avisando que vc terá problemas com ActiveX em projeto DLL.. para resolver, faça o seguinte: no OnCreate do 1o form a ser criado no projeto dll, inclua a linha: CoInitialize( nil ); ..e no OnDestroy: CoUninitialize; ..Ah! assim como o Anderson comentou, não use String nos parametros dos métodos que serão exportados na sua dll.. sendo assim, basta mudar o seguinte: Procedure GeraPDF( Servidor, Tipo: PChar ); stdcall; ..pronto, valeu!! ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
RES: [delphi-br] Criando DLL
marcelo, onde vc escreveu essas duas formas? na 1a, se vc escreveu no dpr, então faltou a declaração de Forms em uses. na 2a, depende onde vc escreveu. FILIPE BELCHIOR Tecnólogo de Informática Multibrands Consultoria em Tecnologia ___ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/ -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/delphi-br/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
Re: RES: [delphi-br] Criando DLL
Criação de DLLs Esta é uma outra dúvida bastante freqüente que chega a nós. Como posso usar uma DLL ?, Como posso criar uma DLL ?, Ei, moço! Pra quê serve uma DLL ? Pois bem, DLL ou Dynamic Link Libraries, permitem que um conjunto de funções desenvolvidas em uma linguagem possam ser utilizadas em programas desenvolvidos em outras linguagens. Você pode, por exemplo, criar uma DLL em Delphi com um conjunto de funções e utilizá-la em aplicativos desenvolvidos em C++ ou Visual Basic, por exemplo. Agora, vamos começar criando uma DLL: 1. Selecione o item New do Menu File, para exibir a caixa de diálogo New Items. Agora, selecione o item DLL e clique em OK, para gerar o código principal da DLL, que se apresenta a seguir: library Project1; { 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 SysUtils, Classes; begin end. Em muitas situações, inclusive esta, o arquivo DELPHIMM.DLL deve ser distribuído junto à sua aplicação. Uma outra observação muito importante, para que você possa escrever suas DLLs, você deve ter conhecimentos na Linguagem Object Pascal. Vamos continuar criando nossa DLL, pois é ela que iremos usar mais para frente. Apenas como exemplificação, vamos criar uma função que receba como parâmetros dois números reais e retorne o maior deles. Function Max (a b : double ) : double ; Export ; stdcall ; begin If (a b) then Result :=a else Result := b ; end ; Export = indica que a função poderá ser chamada por outros aplicativos. Stdcall = permite que aplicativos desenvolvidos em outras linguagens façam chamadas à função. Após serem feitas estas alterações e salvar o projeto com o nome MAXDLL, nossa DLL ficará assim: library Project1; { 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 SysUtils, Classes; function Max(a, b : double):double:expert:stdcall: begin if (a b) then result:= a else result := b; end; exports Max index 1; begin end. Você pode compilar uma DLL, assim como a um projeto no Delphi, e distribuir livremente. PS: Você não pode executar uma DLL pelo Delphi, através do RUN do Menu Run, pois não se trata de uma aplicação. Mais à frente, você perceberá que uma DLL pode usar formulários e objetos definidos em outras unidades. Iremos, agora, chamar uma DLL, a partir de outra aplicação. Neste exemplo que iremos montar, iremos usar: um formulário, duas caixas de texto (os quais o usuário irá digitar dois números reais), um botão de comando. unit usadll; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; function Max(a, b : double):double;stdcall; var Form1: TForm1; implementation {$R *.DFM} function Max(a, b : double):double;external 'MaxDLL'; procedure TForm1.Button1Click(Sender: TObject); var x, y, resultado : double; begin x := StrToFloat(Edit1.Text); y := StrToFloat(Edit2.Text); resultado := Max(x,y); ShowMessage('Valor Máximo ' +FloatToStr(resultado)); end; end. PS: A função Max está declarada na seção interface e implementada na seção implementation, ou seja, a função está implementada em uma DLL. Bem, mostramos como criar uma DLL simples e como fazer chamada de uma DLL. Agora, iremos melhorar nossa DLL, fazendo com que ela exiba um formulário qualquer em qualquer aplicação desenvolvida para Windows. Marcelo Alves de Souza escreveu: Será que ninguém pode me ajudar??? Marcelo. -Mensagem original- De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Marcelo Alves de Souza Enviada em: segunda-feira,