Cruzamento de Linguagens (Delphi7 x Borland C 5.0 1991/96)

02/06/2006

0

02/06/2006 sex 11:40

Prezados participantes do Forum Delphi,

Recentemente tive uma solução acompanhada de um problema
na chamada pelo DELPHI7 a um DLL programado em C++.

A solução foi que eu consegui chamar esse DLL aparentemente
com sucesso porem logo a seguir (quando sai do evento) o sistema
operacional dá varios tipos de erro como Instrução Invalida,
tela com parte da memoria que deu erro e outros tipos que não me
lembro agora. Examinando o retorno da função (Delphi) parece que
o DLL ´estraga´ os parametros ao sair...Uma solução ´quebra galho´
foi dar um ´exit´ (retorno do evento) ao final da procedure que
chama o DLL.

Programo em C++ (com pouco enfase ao ++ pois gosto de programar
complicando a codificação o minimo possivel) e desenvolvi muitas
funções interessantes que é dificil fazer no Delphi(Pascal). Esse
C++ só da tela em Dos Mode e fica meio desagradavel fazer o usuario
do programa ler/digitar numa tela com poucos recursos.

Por outro lado o Delphi tem recursos visuais que o meu C++ não
tem tais como telas muito apresentaveis e elasticas aproveitando
bem os recursos do micro.

É uma pena descobrir que os dois não tem uma convivencia
muito pacifica pois seria interessante unir o
util a mim (C++) ao agradavel ao usuario (Delphi).

Alguem já sentiu esse problema? Qual foi a solução??


Laertius

Laertius

Responder

Posts

02/06/2006

Massuda

Talvez você não tenha ajustado corretamente a [b:5d8f2eafab]convenção de chamada[/b:5d8f2eafab] das suas funções em C na DLL. O mais simples é declarar suas funções em C como sendo WINAPI (macro definida em Windows.h ou WinDef.h... não lembro), por exemplo...
/* em C */
int WINAPI foo(int x...
...e declarar assim em Delphi...
// em Delphi
function foo(x: Integer...): Integer; stdcall; external ´suadll´;



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar