Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с DLL / 7 сообщений из 7, страница 1 из 1
14.01.2003, 13:23
    #32090232
Aleksei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DLL
Как можно из DLL передать массив.
В DLL массив передать можно (и очень просто) а вот как сделать так, чтобы результат функции возвращаемой из DLL был массив.
...
Рейтинг: 0 / 0
14.01.2003, 14:37
    #32090323
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DLL
Используй mutex'ы
...
Рейтинг: 0 / 0
14.01.2003, 14:42
    #32090331
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DLL
... пиши резюлт в файл .... апосля отработки дллюхи ... потом киляй файло и все....
можно еще стрим на порт повесить - потом - запрашивать с него ...
можно еще шедул повесить на процесс ...
мона поинтер (указатель повесить на твой массив в памяти) - потом заюзать через неявное приведение переменных и указателей ...
т.п.
вобщем вариантов куча ...
...
Рейтинг: 0 / 0
14.01.2003, 15:13
    #32090381
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DLL
А в чём собственно проблема передай указатель на массив в который надо запихать результат работы(если он не динамический).

Если динамический то делай как все функции WinAPI - делают, передавай указатель на некий Buffer, а возвращай длину этого буффера.

А лучше исходники покажи так намного проще....
...
Рейтинг: 0 / 0
14.01.2003, 15:29
    #32090412
Aleksei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DLL
Вообщето я читал, что из DLL массив возвращать нельзя
А исходник примерно такой

Function Porydok(S:Array of String):Array of Integer;
begin
.........
end;

Копилятор дает ошибку на Array of Integer

Так вот как мне вернуть результат в виде массива!
...
Рейтинг: 0 / 0
14.01.2003, 15:36
    #32090429
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DLL
Function Porydok(S:Array of String):Array of Integer;
begin
.........
end;

Посмотрел...
Что могу сказать...
1) Заменил бы ты лучше Array of String - на TStringList или TStrings
2) А Array of Integer на TList.

С ними работать будет проще намного нежели с массивами, так как ты пытаешся работать с динамическими массивами.

И ещё встречные вопросы:
1) DLL с VCL ???
2) DLL - грузиться динамически ???
...
Рейтинг: 0 / 0
14.01.2003, 18:14
    #32090627
SiDen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DLL
Если известен рамер возвражаемого массива, то можно поступить так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
DLL
library Project1;
uses
  SysUtils,
  Classes;

type
  strarr=array of string;
  intarr=array of integer;
  pstrarr=^strarr;
  pintarr=^intarr;
{$R *.res}
procedure aaa(bbb: pstrarr; bbb2: pintarr); far;
var
  rslt: intarr;
begin
  bbb2^[ 0 ]:= 1 ;
  bbb2^[ 1 ]:= 2 ;
end;

exports
  aaa;
begin
end.


И сама программа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  strarr=array of string;
  intarr=array of integer;
  pstrarr=^strarr;
  pintarr=^intarr;
  aaa=procedure (bbb: pstrarr; bbb2: pintarr);

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  p: pointer;
  bbb: strarr;
  bbb2: intarr;
  j: integer;
begin
  i:=LoadLibrary(PChar('./dll/project1.dll'));
  p:=GetProcAddress(i,PChar('aaa'));
  setlength(bbb, 2 );
  bbb[ 0 ]:='1';
  bbb[ 1 ]:='2';
  setlength(bbb2, 2 );
  aaa(p)(@bbb,@bbb2);
  for j:= 0  to length(bbb2)- 1  do
    memo1.Lines.Add(inttostr(bbb2[j]));
  FreeLibrary(i);
end;
end.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с DLL / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]