Chamar as funções C ++ em Delphi é bastante direto e chamando as funções Delphi no C ++
O que significa que o método de chamada de função padrão de Delphi 1 é o método Pascal, Delphi 4, Delphi
O método padrão de 5 é o método de chamada CDECL otimizado, ou seja, o método de registro. Estar em C ++
Implementar o compartilhamento de funções com os programas Delphi, a menos que haja razões suficientes, o padrão deve ser usado.
O método de chamada de sistema nu, ou seja, o método StdCall. Para que o compilador C ++ não marque a função como "mang"
LED ", fazendo com que o compilador Delphi acredite erroneamente que a função usa o método de chamada CDECL, deve estar em C ++
No código, extern "C" descreve a função compartilhada, como mostrado no exemplo a seguir: Descrição do protótipo: em C ++
In: extern "c" int _stdcall testfunc ();
stdcall; chamada sintaxe: em c ++: int i = testfunc ();
Em Delphi: var i: inteiro;…
começar…
i: = testfunc;…
final; os parâmetros da função compartilhada devem ser o tipo de variável suportado por ambos os idiomas, que é o correto.
Pré -requisito para os parâmetros de aprovação. Classes variáveis, como moeda, string, conjunto, etc. de Delphi, etc.
Tipo, em C ++, não existe tipo de variável correspondente e não pode ser usado como um parâmetro de uma função compartilhada. Pode
Passe os ponteiros de string com parâmetros de valor usando o tipo Pchar.
Reciclagem do espaço da corda.
Os parâmetros variáveis no idioma Delphi devem ser descritos como formulários de referência dos tipos de variáveis correspondentes em C ++.
Como segue: em delphi: função testfunc (var i: inteiro): inteiro;
In: int testfunc (int & i);
A conexão pode ser feita por vinculação estática ou vinculação dinâmica.
1. Método de vinculação estática se o próprio programa C ++ tiver uma pequena quantidade de código, e não há necessidade de se preocupar com C
A biblioteca de tempo de execução terá um processo interativo, e o método de vinculação estática pode ser usado, ou seja, Delphi e C ++
O arquivo de objeto (*.obj) está vinculado ao arquivo executável final. O método específico é usar {$ l}
Compilar instruções para ativar o compilador Delphi para ler automaticamente o arquivo de destino especificado, conforme descrito abaixo: Função
Testfunc: Inteiro; stdcall; {$ l testfunc.obj} 2.
Se o código C ++ já for bastante abrangente ou um subsistema completo, o volume de código é grande, ou
Ao usar a biblioteca de tempo de execução C, nesse caso, o método Dynamic Link Library (DLL) deve ser usado. esse
Quando a explicação a seguir deve ser feita no código -fonte de dois idiomas: em C ++: int stdcall Export
Testfunc ();
'Testfunc.dll';
Agora, em termos de compartilhamento de métodos de objetos, esse compartilhamento pode ser dividido em dois níveis: objeto (objeto)
Compartilhamento de classe e compartilhamento de classes. Para implementar o compartilhamento em nível de objeto, a linguagem de programação deve ter
Dois pré -requisitos: capaz de definir um ponteiro para um objeto criado por outro idioma;
Métodos em um objeto determinado por um ponteiro.
Para implementar o compartilhamento de nível de classe, você também precisa considerar: poder criar classes definidas por outro idioma
Instância;
A seguir, descreve o método de implementação de compartilhamento de objetos entre Delphi e Borland C ++.
1. Para compartilhar objetos Delphi em C ++, para implementar a chamada de objetos Delphi de C ++, você deve primeiro usar Delphi
A parte da interface da unidade e o arquivo de cabeçalho C ++ indicam a interface do objeto que precisa ser compartilhado, no
A interface do objeto define quais propriedades e métodos o objeto contém e explica as peças que podem ser compartilhadas.
A chave para o compartilhamento de objetos está no compartilhamento de métodos. Na linguagem Delphi, faça um objeto capaz
Para ser compartilhado, pode ser descrito como duas partes da interface, temporariamente chamadas de "interface compartilhada" e "implementação
interface ". onde uma interface compartilhada indica quais métodos no objeto podem ser compartilhados por outro idioma;
A interface atual herda a interface compartilhada e o método na parte de implementação da unidade é usado para implementar a interface.
Definir implementações específicas. Para definir um objeto Delphi que pode ser compartilhado por C ++, a interface compartilhada
Nota: No programa Delphi, o método a ser compartilhado deve ser descrito como abstrato (resumo).
E virtual (virtual);
O método de objeto compartilhado deve ser explicado como "puro virtual" por Delphi.
Deve ser descrito em ambos os idiomas como o mesmo método de chamada, geralmente usando chamadas de sistema padrão
Way (stdcall).
Abaixo, vamos dar um exemplo dessas regras, assumindo que existe um objeto Delphi: ttestObject = ClassProcedure
Proc1 (x: número inteiro); função func1 (x: inteiro): PCHA; procedimento
Proc2; função func2: número inteiro; end; se os programas C ++ precisar
Métodos Proc1 e Func1 podem ser modificados na seguinte forma:
StestObject = ClassProcedure
Proc1 (X: Inteiro);
stdcall; função func1 (x: inteiro);
virtual; Resumo;
Proc1 (x: inteiro); func1 func1 (x: inteiro): pchar;
procedimento proc2; função
Func2: inteiro; final;
{virtual void proc1 (int x) = 0; Char virtual *func1 (int x) = 0;};
Para acessar com sucesso as classes definidas pelo Delphi em C ++, a interface Delphi deve ser especificada.
Contém uma "função de fábrica" compartilhável CreateTestObject,
A função de fabricação pode ser definida em uma biblioteca de link dinâmica ou arquivo de objeto (.obj), por exemplo: biblioteca
Testlib; exports CreateTeTObject; função createTeStObject: stestObject;
stdcall;
fim.
O objeto da chamada é o seguinte: extern "c" stestObject stdcall
*CreateTeTObject (); void
UsetestObject (void) {sTestObject *theTestObject = createTeTObject ();
*str = theTestObject-> func1 (0);} ao chamar a função de fabricação CreateTeStObject
Quando o lado Delphi realmente ocupou o espaço de uma instância de objeto, o programa C ++ está em
Depois que todo o processamento deste objeto é concluído, o espaço deve ser libertado.
Defina uma classe em Delphi, como o método compartilhado livre do proc1 mencionado acima, para completar isso
Uma tarefa: sTestObject = ClassProcedure Proc1 (X: Inteiro);
resumo;
stdcall; procedimento livre;
implementação…
procedimento ttestObject.free;
fim;…
END.2.Delphi Compartilhe objetos C ++ Normalmente, os programadores consideram o uso do Delphi para compilar.
A interface do usuário, portanto, o código Delphi chama o código C ++ parece ser mais prático. Na verdade, Delphi
O método de implementação de compartilhar objetos C ++ é muito semelhante aos objetos Delphi compartilhados acima C ++. Use o mesmo
Interface compartilhada e interface de implementação Descrição Método para definir classes C ++: classe StestObject
{virtual void proc1 (int x) = 0; Char Virtual *func1 (int x) = 0;}; classe;
TtestObject: public stestObject {void proc1 (int x); char *func1 (int
x); void proc2 (); int func2 (); void livre ();};
. Da mesma forma, os objetos C ++ requerem uma função de fabricação correspondente.
STDCALL EXPORT *CreateTeTObject () {return (stestObject *)
novo ttestObject.create;} O código Delphi pode ser usado para criar uma função createTeToBject chamando o createTeTObject,
É fácil criar uma instância em C ++, obter o valor do ponteiro nessa instância e usar este ponteiro
Valor para chamar métodos compartilhados no objeto. Obviamente, depois de concluir o processamento relevante do objeto,
Não se esqueça de ligar para libertar o espaço ocupado.