2009/11/26 Tiago F. Zacchi <tiago_zac...@yahoo.com.br>:
>
> Olá pessoal,
>        Criei uma dll em delphi, nesta dll uma função que retona uma String.
> Estou querendo acessar esta dll e utilizar o retorno da função no c++, mas
> estou tendo problemas com o tipo String. Se uso o retorno da função como
> Integer funciona legal, mas com String não.

Talvez você consiga declarando a string como widestring, contanto que
o c++ tenha suporte. Do contrário você terá que trabalhar com pchar.

O tipo string do delphi é internamente um pchar gerenciado, você pode
fazer o cast direto de string para pchar. O que você não vai conseguir
é fazer com que a string seja o retorno de uma função, porque isto
exige que a string seja criada em uma aplicação e destruida na outra.
Toda área de memória criada em uma aplicação deve ser destruida por
essa mesma aplicação. Salvo engano você terá que fazer algo assim:

Chamada(PChar, Tamanho);

Quem chama a rotina abre um espaço com "Tamanho" bytes e referencia
essa área em PChar. Quem é chamado popula aquela área de memória com a
informação. Por fim, quem chama a rotina pega a informação e desaloca
a memória depois que utilizar.

Você pode ainda usar outro truque, tal como criar um record e fazer
com que "Chamada" crie e popule esse record pra você com as
informações que você precisa. Depois que você pegar suas strings e o
que mais precisar, você chama outra procedure que destrua esse record
criado anteriormente. Assim tudo é criado e destruído sempre pela
mesma aplicação.

Joao Morais

Responder a