Ajuda com chamada de DLL
Galera, estou precisando muito de uma ajuda o mais rapido possivel.
Help...
bom tenho um exemplo de como chamar essa DLL em VB e precisava fazer o mesmo em Delphi, só q não entendo nada de VB.
abaixo os arquivos q foral usados para a chamada da DLL em VB
TabNcr.vbw
TabPar.bas
TabNcr.frm
Como faço isso em Delphi ??????????
Help...
bom tenho um exemplo de como chamar essa DLL em VB e precisava fazer o mesmo em Delphi, só q não entendo nada de VB.
abaixo os arquivos q foral usados para a chamada da DLL em VB
TabNcr.vbw
TabNcr = 22, 29, 535, 477, C, 110, 145, 623, 593, C TabPar = 22, 29, 535, 477, C
TabPar.bas
Attribute VB_Name = "TabPar" ´Campos para Linkage de DLL COBOL Type Reg_Tabela Tab_Arquivo As String * 20 Tab_Registros As Integer End Type ´Declaracão Da DLL COBOL Declare Sub DLLNCR Lib "GERANCR.DLL" (Tabela As Reg_Tabela)
TabNcr.frm
Attribute VB_Name = "TabNcr" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Dim Tabela As Reg_Tabela Private Sub BtnDLL_Click() Tabela.Tab_Arquivo = "" Tabela.Tab_Registros = 0 Call DLLNCR(Tabela) TxtArquivo = Tabela.Tab_Arquivo TxtRegistros = Tabela.Tab_Registros End Sub
Como faço isso em Delphi ??????????
Fabiano Góes
Curtidas 0
Respostas
Rafael Gomes
17/02/2006
Para chamar uma dll basta declarar como abaixo ... e para usa-la, chame a funcao como voce sempre usou!!
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function Double (N: Integer): Integer; stdcall; external ´NomedaDLL.DLL´;
GOSTEI 0
Rafael Gomes
17/02/2006
[b][b]function FuncaodaDLL(Parametros): tipodaFuncao; stdcall; external ´GERANCR.DLL´;[/b][/b]
GOSTEI 0
Fabiano Góes
17/02/2006
Rafael , muito obrigado pela atenção.
Porem eu ja usei funções de dll, o meu problema é q precisava entender como foi feito isso em VB (no codigo acima) para fazer o mesmo em Delphi.
A DLL é feita em cobol mais já esta compilada em 32 bits, não sei se isso ajuda
esse programinha em VB funciona perfeitamente com esse codigo acima.
Por favor galera, estou precisando muto dessa ajuda, kd os feras do forum sei q aqui é onde se encontra os melhores programadores Delphi, se eu não conseguir este informação aqui, não encontrarei em lugar nenhum.
Porem eu ja usei funções de dll, o meu problema é q precisava entender como foi feito isso em VB (no codigo acima) para fazer o mesmo em Delphi.
A DLL é feita em cobol mais já esta compilada em 32 bits, não sei se isso ajuda
esse programinha em VB funciona perfeitamente com esse codigo acima.
Por favor galera, estou precisando muto dessa ajuda, kd os feras do forum sei q aqui é onde se encontra os melhores programadores Delphi, se eu não conseguir este informação aqui, não encontrarei em lugar nenhum.
GOSTEI 0
Massuda
17/02/2006
Tem cara de ser algo assim (nem sei se compila)...
type Reg_Tabela = packed record Tab_Arquivo: array[0..19] of Char; Tab_Registros: Integer; end; procedure DLLNCR(var ATabela: Reg_Tabela); stdcall; external ´GERANCR.DLL´; // o equivalente de BtnDLL_Click() seria algo assim... { procedure BtnDLL_Click; begin Tabela.Tab_Arquivo := ""; Tabela.Tab_Registros := 0 ; DLLNCR(Tabela); TxtArquivo := Tabela.Tab_Arquivo; TxtRegistros := Tabela.Tab_Registros; end; }
GOSTEI 0
Fabiano Góes
17/02/2006
Massuda funcionou cara, valeu mesmo !!!!
só ao sair do programa fica dando erro de referencia de memória:
como corrigir isso ????
desded já agradeço muito !!!!!
só ao sair do programa fica dando erro de referencia de memória:
A instrução no "0x61046d46" fez referência a memória no "0x00000000". A memória pode ser "read"
como corrigir isso ????
desded já agradeço muito !!!!!
GOSTEI 0
Rafael Gomes
17/02/2006
perdao, nao havia ficado claro sua pergunta ...
abraços!!!
abraços!!!
GOSTEI 0
Fabiano Góes
17/02/2006
Rafael , beleza cara mesmo assim valeu pela usa atenção !
Mais e ai galera como evito esta mensagem de referencia de memoria
já tentei :
mais não deu certo.
Mais e ai galera como evito esta mensagem de referencia de memoria
A instrução no ´0x61046d46´ fez referência a memória no ´0x00000000´. A memória pode ser ´read´
já tentei :
FreeAndNil(Tabela);
mais não deu certo.
GOSTEI 0
Massuda
17/02/2006
O FreeAndNil não deve funcionar porque, imagino, Tabela é um record.
Sinceramente fiquei surpreso disso funcionar, porque não tenho certeza se......equivale a......se você puder, verifique com alguem que mexe com VB se ´As String * 20´ significa ´uma string de 20 caracteres´.
Sinceramente fiquei surpreso disso funcionar, porque não tenho certeza se...
Type Reg_Tabela Tab_Arquivo As String * 20 ...
type Reg_Tabela = packed record Tab_Arquivo: array[0..19] of Char; ...
GOSTEI 0
Fabiano Góes
17/02/2006
É Massuda , funcionou mesmo cara,
e me ajudou muito ,
vc não tem idéia cara.
Valeu, Valeu, Valeu, Valeu, Valeu, Valeu, Valeu !!!!
Mais não querendo ser chato , porem já sendo(rsrssr)
Se alguem puder me ajudar com o Erro ao sair do programa eu agraço.
e me ajudou muito ,
vc não tem idéia cara.
Valeu, Valeu, Valeu, Valeu, Valeu, Valeu, Valeu !!!!
Mais não querendo ser chato , porem já sendo(rsrssr)
Se alguem puder me ajudar com o Erro ao sair do programa eu agraço.
A instrução no "0x61046d46" fez referência a memória no "0x00000000". A memória pode ser "read"
GOSTEI 0
Massuda
17/02/2006
Pode ser qualquer coisa.
Fora isso, não tenho nenhuma outra sugestão.
A instrução no ´0x61046d46´
Tente determinar onde o erro está ocorrendo. Para isso:[list:3258fdd451][*:3258fdd451]marque as opções de debug em [b:3258fdd451]Project|Options|Compiler|Debugging[/b:3258fdd451][*:3258fdd451]dê um build (menu [b:3258fdd451]Project|Build[/b:3258fdd451]) no seu programa[*:3258fdd451]inicie a execução do seu programa[*:3258fdd451]volte no Delphi[*:3258fdd451]no menu [b:3258fdd451]Search|Find Error[/b:3258fdd451], informe o endereço do erro (no caso, 61046d46)[/list:u:3258fdd451]Com um pouco de sorte, o Delphi irá mostrar a linha problemática.Fora isso, não tenho nenhuma outra sugestão.
GOSTEI 0