Clipper On Line • Ver Tópico - Passar array como parâmetro do Clipper/xH para dll em Delphi

Passar array como parâmetro do Clipper/xH para dll em Delphi

Discussão sobre outras linguagens de programação.

Moderador: Moderadores

 

Passar array como parâmetro do Clipper/xH para dll em Delphi

Mensagempor maurozb » 05 Dez 2013 16:09

Olá a todos.

De antemão peço desculpas se postei no lugar errado.

Meu patrão me pediu para investigar se é possível fazer uma função em Delphi (dentro de uma dll) em que ele irá utilizar na sua linguagem Clipper/xHarbour onde o parâmetro passado seja um Array.

De Delphi (exe) para Delphi (dll) dá certo, basicamente passando o endereço da variável. Como o tipo de array declarado na dll é o mesmo no programa executável em que uso para testar a dll, funciona corretamente.

Código da DLL (é apenas um teste)

library vetor;

uses
  System.SysUtils,
  System.Classes,
  Vcl.Dialogs;

type
  TArrayofString = array of string;
//  TArrayofString = array[1..100] of string;

{$R *.res}

procedure AVetor(pVetor: TArrayofString; Colunas: Byte); stdcall; export;
var
  I: Byte;
  Tamanho: Byte;
begin
  SetLength(pVetor, Colunas);

  for I := 1 to Colunas do
    showmessage(pVetor[I]);
end;

exports
  AVetor;

begin
end.


Código do Executável para testar a dll (em Delphi)

unit uTesteVetor;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;

type
  TfrmTesteVetor = class(TForm)
    btnTestar: TBitBtn;
    procedure btnTestarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TArrayofString = array of string;

var
  frmTesteVetor: TfrmTesteVetor;

implementation

{$R *.dfm}

procedure AVetor(pVetor: TArrayofString; Colunas: Byte); stdcall; external 'vetor.dll';

procedure TfrmTesteVetor.btnTestarClick(Sender: TObject);
var
  loVetor: TArrayofString;
begin
  SetLength(loVetor, 3);

  loVetor[1] := 'Coluna 1';
  loVetor[2] := 'Coluna 2';
  loVetor[3] := 'Coluna 3';

  AVetor(loVetor, 3);

  ShowMessage('Fim.');

  Close;
end;

end.


Abaixo segue o código de um pequeno prg (exe) criado pelo meu chefe para testar já com Clipper/xHarbour

func main()
aviso("Entrou",0)
NDLL_pro := LoadLibrary("vetor.dll")

clear
mretorno = space(20)
declare vetor[255]
vetor[1]="MARCOS"
VETOR[2]="MAURO"
VETOR[3]="RAFAEL"
MITENS=3
mret_dll := DLLCALL(NDLL_pro, 32, "AVetor", mretorno, vetor, MITENS)


Talvez se passasse o endereço do array (ponteiro?) como parâmetro e o Delphi sabendo manipular como um Array interno poderá dar certo. Mas não sou expert no assunto e peço ajuda a vocês.

A função acima se destina para o seguinte: meu chefe em seu programa Clipper/xHarbour exibe uma tela quando gera um relatório informando os resultados como uma visualização (preview). Porém, os procedimentos que ele utiliza comporta 80 caracteres na coluna. Vi até uns tópicos sobre esse problema aqui no fórum e passei para ele. Mas como ele quer melhorar a estética da apresentação desse resultado em tela, ele insistiu se tem como passar um array... A necessidade dele é de uma função genérica que ele poderá usar em qualquer relatório (visualização de informações na tela).

Foi mal se não expliquei direito, mas não entendo de Clipper/xHarbour. E ainda estou começando em Delphi.
Obrigado a todos.
maurozb
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 1
Data de registro: 19 Ago 2011 16:31
Cidade/Estado: Montes Claros/MG
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Passar array como parâmetro do Clipper/xH para dll em Delphi

Mensagempor rochinha » 01 Jan 2014 21:48

Amiguinho,

Vejamos se entendi,

Voce tem um sistema em Clipper/DOS que gera um relatorio, em tela, mas desejam que este relatorio possa apresentar mais colunas, ok?

Primeiro. Se voce possui o código em Clipper/DOS é possivel utilizar esta saida em tela de forma mais dinamica e a saida poderia ser de várias maneiras.

Uma delas é direcionar o conteúdo do preview para um arquivo TeXTo e abrir este arquivo com os comandos de edição de memo, MemoEdit( "Arquivo.txt", 132 ). Se é que é assim o comando, pois já não uso mais o Clipper/DOS.

O parâmetro 132 seria a largura do conteudo em colunas.

Digo isto se for o caso de voce conhecer melhor o Clipper que o Delphi.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4313
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 565 vezes
Mens.Curtidas: 191 vezes




Retornar para Outras linguagens de programação

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro