![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FreeLibrary -> Invalid pointer operation
pargo © (2006-02-17 14:50:00)В проекте тестирую загрузку и выгрузку библиотеки:
var
TestLib:string='TestLib.dll';
Hand:THandle=0;
procedure Test;
begin
Hand:=LoadLibrary(PChar(TestLib));
if Hand<>0 then FreeLibrary(Hand);<----- Invalid pointer operation
end;
Библиотека при згрузке не выполняет никаких действий,
кроме того, что в ней есть функции типа: function SamFunction; external ADVAPI32;
Если в библиотеке не подключен модуль ShareMem, то при FreeLibrary вылетает
с ошибкой: " Invalid pointer operation", а при использовании SareMem этой
ошибки нет. В чем может быть дело ? Как избежать ошибки, не подключая ShareMem ?
pargo (2006-02-17 17:33:00) [1]Игорь Шевченко © (17.02.06 16:56) [16]
Огромное спасибо ! Помогло: "Если код очень большой, то сделай его маленьким"
В одном из присоединяемых юнитов в uses оказался ShareMem.
( Убей бог, не помню зачем я его туда засунул :)) )
Убрал и все заработало.
Игорь Шевченко (2006-02-17 17:08:00) [2]
> Если то был ты, Игорь - прекращаю.
С просьбой - Я.
RO (2006-02-17 17:01:00) [3]Если то был ты, Игорь - прекращаю.
pargo (2006-02-17 16:58:00) [4]Игорь Шевченко © (17.02.06 16:56) [16]
Спасибо, попробую.
Игорь Шевченко (2006-02-17 16:56:00) [5]pargo © (17.02.06 16:49) [15]
Убери
SysUtils и Classes из
uses
//ShareMem,
SysUtils,
Windows,
Classes,
Если код очень большой, то сделай его маленьким и проверь утверждение
> Библиотека при згрузке не выполняет никаких действий,
> кроме того, что в ней есть функции типа: function SamFunction;
> external ADVAPI32;
pargo (2006-02-17 16:49:00) [6]Код очень большой, весь здесь не поместиться :((
приведу выдержки.
library TestLib;
uses
//ShareMem,
SysUtils,
Windows,
Classes,
........
WinCrypt in 'WinCrypt.pas';
{$R *.res}
begin
end.
//////////////////////////////////////////////////////////////////////////////
unit WinCrypt;
interface
uses Windows;
.............................................
function CryptAcquireContextA(
var phProv: HCRYPTPROV;
szContainer: LPCSTR;
szProvider: LPCSTR;
dwProvType: DWORD;
dwFlags: DWORD
): BOOL; stdcall;
...........................................
{$IFDEF UNICODE}
function CryptAcquireContext; external ADVAPI32 name 'CryptAcquireContextW';
{$ELSE}
function CryptAcquireContext; external ADVAPI32 name 'CryptAcquireContextA';
{$ENDIF} // !UNICODE
.....................................................
end.
RO (2006-02-17 16:49:00) [7]Удалено модератором
Примечание: Прекрати.
RO (2006-02-17 16:31:00) [8]Я уже понял, кто и почем.
Mikhail (2006-02-17 16:28:00) [9]
> RO
Напугал человека :)
Код !!!!!!!!!! (см. > Игорь Шевченко © (17.02.06 16:02) [7])
RO (2006-02-17 16:25:00) [10]Удалено модератором
RO (2006-02-17 16:22:00) [11]Удалено модератором
RO (2006-02-17 16:18:00) [12]
> pargo
А если ты не понимаешь разницы между декларацией идентификатора и последующим использользованием ранее декларированного идентификатора, то тебе дорога в букварь по Паскалю, прежде че ты начнешь "тыкаться" в Делфи.
RO (2006-02-17 16:15:00) [13]
> pargo © (17.02.06 15:47) [6]
> RO (17.02.06 15:40) [5]
> Параметры функций, которые TestLib импортирует из AdvApi32
Мало ли кто/что кого/что импортирует !
Если ты не используешь соотв.ссылку, "умный" (!) Делфи-компилятор не включит в результ.код НИ ЕДИНОГО байта, имеющего отношения к тому что ты задумал, но никак не использовал.
Нет вызова - нет проблем.
Игорь Шевченко (2006-02-17 16:02:00) [14]Я надеюсь, для моего телепатора будет сделана поблажка, он и так уже перегрелся.
Код в студию. ВЕСЬ.
pargo (2006-02-17 15:47:00) [15]RO (17.02.06 15:40) [5]
Параметры функций, которые TestLib импортирует из AdvApi32
RO (2006-02-17 15:40:00) [16]
> В параметрах используються только LPCSTR и LPCWSTR
Какике такие "параметры" ?
В приведенном коде нет ни единого вызова ни единой ф-ции из этой DLL.
Есть только ее загрузка и тут же выгрузка.
pargo (2006-02-17 15:36:00) [17]RO (17.02.06 15:21) [2]
Тем не менее это так.
Кроме импорта функций из AdvApi32, ничего нет.
pargo (2006-02-17 15:28:00) [18]В параметрах используються только LPCSTR и LPCWSTR,
исходя из описаний самих функций
RO (2006-02-17 15:21:00) [19]приведенный код при условии
> Библиотека при згрузке не выполняет никаких действий
не может привести к
FreeLibrary -> Invalid pointer operation
Игорь Шевченко (2006-02-17 15:11:00) [20]
> Как избежать ошибки, не подключая ShareMem ?
Не использовать string в параметрах