|
#1
|
|||
|
|||
Проблема с DLL
Как при динамической загрузке DLL (Loadlibrary - freelibrary) сохранить результат, а имеено обработанный массив в процедуре в DLL?
Происходит все так, я посылаю одни даные для обработки в DLL, а оттуда возвращаю массив. После использования freelibrary результат(массив) обнуляется, а мне его нужно сохранить для дальнейшей работы. как это сделать? |
#2
|
||||
|
||||
Передавать массив для обработки с параметром 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
|
|||
|
|||
после выгрузки 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
|
||||
|
||||
Цитата:
Ну во-первых ShareMem тут не к чему, а во вторых попробуй явно указать тип передачи параметрой stdcallback, например --------------------------------------------- Программирование - не профессия, а стиль жизни |