Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

c(++)érebro

[Resolvido] dlls delphi

Recommended Posts

E aí galera!!

Estou tentando usar dlls criadas no delphi , só que estou tendo problemas para dclarar os tipos.Quetipos de dados devo utilizar em dlls?

DEsde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, normalmente os tipos reconhecidos de dados em DLL's são:

String - Integer - Double

 

Como assim problemas, quando você está criando a dll? Quando compila?

Talvez faça o post do código que está utilizando para que possamos analisar.

 

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

Recentemente tive que criar uma dll no Delphi que seria utilizada em diversos sistemas, como VB e C++

tive que usar apenas tipos primitivos nas variaveis das funções exportadas pela dll

Os tipos que usei foram Integer, Pchar e Double.

Um exemplo de dll segue abaixo :

 

 

//Exemplo da dll gerada em Delphi :

library DllTeste;

 

uses

SysUtils,

Classes,

Dialogs;

 

{$R *.res}

//Exemplo de função com passagem por referencia e com retorno

function minhafunc(var Erro: Pchar ): Integer ; stdcall;

Var Campo : String ;

begin

showmessage( 'PASSOU NA DLL. texto recebido:' + Erro ) ;

result := 1 ;

Campo := 'Passagem de Valor por referência';

Erro := PChar( Campo );

end;

 

function minhafunc2(Erro: Pchar ): Integer ; stdcall;

begin

showmessage( 'PASSOU NA DLL. texto recebido:' + Erro ) ;

result := 1 ;

end;

 

Exports

minhafunc,

minhafunc2;

 

begin

end.

 

 

#############################################################################

 

'Exemplo de chamada nesta dll Delphi em Visual Basic 2008

 

Public Class Form1

 

Private Declare Function minhafunc Lib _

"DllTeste" (ByRef sErro As String) As Integer

 

Private Declare Function minhafunc2 Lib _

"DllTeste" (ByVal sErro As String) As Integer

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim TextoEnviado As String

 

TextoEnviado = "Teste"

'Chama a Dll com passagem de valor por referência

If minhafunc(TextoEnviado) Then

MsgBox("Ok Foi. Texto Recebido : " + TextoEnviado)

End If

 

'Chama a Dll com passagem de valor por referência

If minhafunc2(TextoEnviado) Then

MsgBox("Ok Foi.")

End If

 

 

 

End Sub

End Class

 

################################################################################

#######

//Exemplo de chamada de Delphi Dll no C++

 

//$$---- Form CPP ----

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//Exemplo de Passagem de valor por referência de Dll do Delphi para C++ Builder

 

typedef int (*importFunction)(LPCSTR*); //Tipagem da da função

importFunction myfunc;

 

double result;

LPCSTR VarPassada;

VarPassada = "esse valor foi passado para função";

 

LPCSTR* pVarPassada; //Ponteiro usado para passagem por referencia

pVarPassada = &VarPassada; //Ponteiro recebe o valor da variavel a ser passada

 

// Carregar a dll do Delphi

HINSTANCE hinstLib = LoadLibrary(TEXT("DllTeste"));

if (hinstLib == NULL) {

MessageBox(0,"Ocorreu um erro ao abrir a dll!","Erro",0x10);

}

 

// Ponteiro para a função da Dll

myfunc = (importFunction)GetProcAddress(hinstLib, "minhafunc");

if (myfunc == NULL) {

MessageBox(0,"Ocorreu um erro ao abrir função da Dll. Função não encontrada.!","Erro",0x10);

FreeLibrary(hinstLib);

}

 

MessageBox(0,strcat("Valor passado : ", VarPassada ),"Valor por referência",0x10);

// Chamada da função

result = myfunc(pVarPassada);

MessageBox(0,VarPassada,"Valor recebido por referência",0x10);

// Unload DLL file

FreeLibrary(hinstLib);

 

// Display result

MessageBox(0,"FIM DO PROCESSO!","Erro",0x10);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

//Exemplo de Passagem de valor por valor de Dll do Delphi para C++ Builder

 

typedef int (*importFunction)(LPCSTR); //Tipagem da da função

importFunction myfunc2;

 

double result;

LPCSTR VarPassada;

VarPassada = "esse valor foi passado para função";

 

// Carregar a dll do Delphi

HINSTANCE hinstLib = LoadLibrary(TEXT("DllTeste"));

if (hinstLib == NULL) {

MessageBox(0,"Ocorreu um erro ao abrir a dll!","Erro",0x10);

}

 

// Ponteiro para a função da Dll

myfunc2 = (importFunction)GetProcAddress(hinstLib, "minhafunc2");

if (myfunc2 == NULL) {

MessageBox(1,"Ocorreu um erro ao abrir função da Dll. Função não encontrada.!","Erro",0x10);

FreeLibrary(hinstLib);

}

 

MessageBox(2,strcat("Valor passado : ", VarPassada ),"Valor por valor",0x10);

// Chamada da função

result = myfunc2(VarPassada);

 

// Unload DLL file

FreeLibrary(hinstLib);

 

// Display result

MessageBox(0,"FIM DO PROCESSO!","Erro",0x10);

}

//---------------------------------------------------------------------------

 

 

##############################################################3333

Espero ter ajudado

 

 

 

Reginaldo Donizete Felix

Analista de Sistemas

 

http://www.regifelix.com.br

msn: regifelix@hotmail.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.