Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.11.2007, 17:16
Maxigeon Maxigeon вне форума
Прохожий
 
Регистрация: 08.11.2007
Сообщения: 3
Репутация: 10
По умолчанию Проблема с DLL

Как при динамической загрузке DLL (Loadlibrary - freelibrary) сохранить результат, а имеено обработанный массив в процедуре в DLL?
Происходит все так, я посылаю одни даные для обработки в DLL, а оттуда возвращаю массив. После использования freelibrary результат(массив) обнуляется, а мне его нужно сохранить для дальнейшей работы. как это сделать?
Ответить с цитированием
  #2  
Старый 14.11.2007, 19:23
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Передавать массив для обработки с параметром VAR или передавать ссылку на массив.
Код:
type
  TArr = array[0..10] of Byte;
  PArr = ^TArr;
.............
// Вариант 1 с VAR
procedure DoSomething1(var Arr : TArr);
begin
.......
end;

// Вариант 2 с указателями
procedure DoSomething2(Arr : PArr);
begin
............
end;
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
  #3  
Старый 16.11.2007, 09:00
Maxigeon Maxigeon вне форума
Прохожий
 
Регистрация: 08.11.2007
Сообщения: 3
Репутация: 10
По умолчанию

после выгрузки dll (freelibrary) выдает сообщение об ошибке:
что не так?
Код:
{текст программы использующей dll}
program use_dll;
{$APPTYPE CONSOLE}
uses
  Windows,
  dialogs;
var
    hModule: THandle;
    pGetSum: function(const n1, n2: integer): integer;
    n: integer;
    s:string;
begin
    hModule := LoadLibrary('dll.dll');
    assert(hModule <> 0, 'Can''t load DLL!');
    pGetSum := GetProcAddress(hModule, 'getsum');
    assert(@pGetSum <> nil, 'Can''t find the getSum function!');
    n := pGetSum(10, 20);
    str(n,s);
    showmessage(s);
    FreeLibrary(hModule);
end.
Код:
{Текст самой dll}
library dll;
uses
  Sharemem,
  SysUtils,
  Classes;

 function getsum(const n1, n2: integer): integer;
begin
  result:=n1+n2;
end;
exports getsum;
begin
end.
Ответить с цитированием
  #4  
Старый 16.11.2007, 11:34
Аватар для mav_c
mav_c mav_c вне форума
Активный
 
Регистрация: 26.03.2007
Адрес: Москва
Сообщения: 287
Репутация: 30
По умолчанию

Цитата:
Сообщение от Maxigeon
после выгрузки dll (freelibrary) выдает сообщение об ошибке:
что не так?
{текст программы использующей dll}
program use_dll;
{$APPTYPE CONSOLE}
uses
Windows,
dialogs;
var
hModule: THandle;
pGetSum: function(const n1, n2: integer): integer;
n: integer;
s:string;
begin
hModule := LoadLibrary('dll.dll');
assert(hModule <> 0, 'Can''t load DLL!');
pGetSum := GetProcAddress(hModule, 'getsum');
assert(@pGetSum <> nil, 'Can''t find the getSum function!');
n := pGetSum(10, 20);
str(n,s);
showmessage(s);
FreeLibrary(hModule);
end.

{Текст самой dll}
library dll;
uses
Sharemem,
SysUtils,
Classes;

function getsum(const n1, n2: integer): integer;
begin
result:=n1+n2;
end;
exports getsum;
begin
end.

Ну во-первых ShareMem тут не к чему, а во вторых попробуй явно указать тип передачи параметрой stdcallback, например
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни
Ответить с цитированием
  #5  
Старый 19.11.2007, 11:08
Maxigeon Maxigeon вне форума
Прохожий
 
Регистрация: 08.11.2007
Сообщения: 3
Репутация: 10
По умолчанию

всякие различные директивы пробовал - не помогает,
После выгрузки появляется ошибка:
1.jpg

интересно то, что на других компах, такой беды не происходит.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter