GARANTIR DESCONTO

Fórum Functions! #179182

02/09/2003

0

Olá pessoal estou colocando uma função dentro de uma dll que me retorna 3 valores so que esta dando erro acho q seja algo relacionado com as variaveis pq para retornar 3 valores acho eu que eu tenha que enviar as variaveis de retorno dentrentro dos parametros da funcao, quando eu fecho o programa da erro de invalid pointer operation, acho q seja algo simples se alguem puder me ajudar... obrigadoo..


Título editado conforme as regras de conduta. Favor não apelar e somente descrever o problema (Zoom)


Zacca

Zacca

Responder

Posts

02/09/2003

Macario

colega nos passe um trecho da funçaõ


Responder

Gostei + 0

02/09/2003

Zacca

function Divide(str:string;var ini:string;var fim:string;var meio:string):string; var tini,tfim,i:integer; begin ini:=´´; meio:=´´; fim:=´´; for i:= 1 to Length(str) do begin if pos(str[i],´ ´) > 0 then begin tini:=pos(str[i],´ ´); //ShowMessage(´str ´+ini+´ tamanho ´+inttostr(tini)); Break; end; ini:=ini+str[i]; end; for i:= length(str) downto 0 do begin if pos(str[i],´ ´) > 0 then begin tfim:=pos(str[i],´ ´); //ShowMessage(´str ´+fim+´ tamanho ´+inttostr(tfim)); Break; end; fim:=str[i]+fim; end; {meio1:=length(ini)+1; meio2:=length(str)-length(fim);} for i:=length(ini)+1 to length(str)-length(fim) do begin meio:=meio+str[i]; end; end;


cara o problema é o retorno do ´meio´ acho q seja isso... pq quando eu tiro o for do ´meio´ nao da erro nenhum....


Responder

Gostei + 0

02/09/2003

Zacca

Olá pessoal estou colocando uma função dentro de uma dll que me retorna 3 valores so que esta dando erro acho q seja algo relacionado com as variaveis pq para retornar 3 valores acho eu que eu tenha que enviar as variaveis de retorno dentrentro dos parametros da funcao, quando eu fecho o programa da erro de invalid pointer operation, acho q seja algo simples se alguem puder me ajudar... obrigadoo..



Responder

Gostei + 0

02/09/2003

Marcelo Saviski

se o erro for no for do ´meio´ tnta então triocar esse for por um Copy:


trocar:
for i:=length(ini)+1 to length(str)-length(fim) do 
begin 
meio:=meio+str[i]; 
end; 


por:

meio := Copy(str, length(ini)+1, length(str)-length(fim) - length(ini)+1);


Algo assim


Responder

Gostei + 0

02/09/2003

Zacca

vou testar colocar o copy mas é que eu chamo as funcoes em um loop parece que o erro é por este motivo tem alguma coisa a ver..?/


Responder

Gostei + 0

02/09/2003

Marcelo Saviski

vou testar colocar o copy mas é que eu chamo as funcoes em um loop parece que o erro é por este motivo tem alguma coisa a ver..?/


até pode, se você tentar acessar um indice válido, tipo str[-150], ou algo assim, mas acho que isso não ocorre na sua function


Responder

Gostei + 0

02/09/2003

Allen74

zacca,

A passagem de parâmetros como var para DLLs não é recomendada porque a DLL e seu programa não compartilham a mesma área de memória. Não sei se com a utilização da unit ShareMem da borland (mais informações no help do Delphi) poderia resolver este problema (se é que você já não está utilizando).

O mais indicado seria utilizar PChar como parâmetro para a função.

Consulte estes artigo para saber maiores detalhes sobre a criação de DLLs com o delphi:

http://www.avdf.com/aug95/delf_dll1.html
http://www.avdf.com/aug95/delf_dll2.html

Dentro do segundo artigo, este trata mais especificamente das strings:

http://www.avdf.com/aug95/samp2_dll2.html

Um bom artigo em português, mais atualizado na questão das strings:

http://www.cristianok.hpg.ig.com.br/art2/


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar