Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизFreeLibrary -> Invalid pointer operation Найти похожие ветки
← →
pargo © (2006-02-17 14:50) [0]В проекте тестирую загрузку и выгрузку библиотеки:
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 ?
← →
Игорь Шевченко © (2006-02-17 15:11) [1]
> Как избежать ошибки, не подключая ShareMem ?
Не использовать string в параметрах
← →
RO (2006-02-17 15:21) [2]приведенный код при условии
> Библиотека при згрузке не выполняет никаких действий
не может привести к
FreeLibrary -> Invalid pointer operation
← →
pargo © (2006-02-17 15:28) [3]В параметрах используються только LPCSTR и LPCWSTR,
исходя из описаний самих функций
← →
pargo © (2006-02-17 15:36) [4]RO (17.02.06 15:21) [2]
Тем не менее это так.
Кроме импорта функций из AdvApi32, ничего нет.
← →
RO (2006-02-17 15:40) [5]
> В параметрах используються только LPCSTR и LPCWSTR
Какике такие "параметры" ?
В приведенном коде нет ни единого вызова ни единой ф-ции из этой DLL.
Есть только ее загрузка и тут же выгрузка.
← →
pargo © (2006-02-17 15:47) [6]RO (17.02.06 15:40) [5]
Параметры функций, которые TestLib импортирует из AdvApi32
← →
Игорь Шевченко © (2006-02-17 16:02) [7]Я надеюсь, для моего телепатора будет сделана поблажка, он и так уже перегрелся.
Код в студию. ВЕСЬ.
← →
RO (2006-02-17 16:15) [8]
> pargo © (17.02.06 15:47) [6]
> RO (17.02.06 15:40) [5]
> Параметры функций, которые TestLib импортирует из AdvApi32
Мало ли кто/что кого/что импортирует !
Если ты не используешь соотв.ссылку, "умный" (!) Делфи-компилятор не включит в результ.код НИ ЕДИНОГО байта, имеющего отношения к тому что ты задумал, но никак не использовал.
Нет вызова - нет проблем.
← →
RO (2006-02-17 16:18) [9]
> pargo
А если ты не понимаешь разницы между декларацией идентификатора и последующим использользованием ранее декларированного идентификатора, то тебе дорога в букварь по Паскалю, прежде че ты начнешь "тыкаться" в Делфи.
← →
RO (2006-02-17 16:22) [10]Удалено модератором
← →
RO (2006-02-17 16:25) [11]Удалено модератором
← →
Mikhail (2006-02-17 16:28) [12]
> RO
Напугал человека :)
Код !!!!!!!!!! (см. > Игорь Шевченко © (17.02.06 16:02) [7] )
← →
RO (2006-02-17 16:31) [13]Я уже понял, кто и почем.
← →
RO (2006-02-17 16:49) [14]Удалено модератором
Примечание: Прекрати.
← →
pargo © (2006-02-17 16:49) [15]Код очень большой, весь здесь не поместиться :((
приведу выдержки.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.
← →
Игорь Шевченко © (2006-02-17 16:56) [16]pargo © (17.02.06 16:49) [15]
Убери
SysUtils и Classes из
uses
//ShareMem,
SysUtils,
Windows,
Classes,
Если код очень большой, то сделай его маленьким и проверь утверждение
> Библиотека при згрузке не выполняет никаких действий,
> кроме того, что в ней есть функции типа: function SamFunction;
> external ADVAPI32;
← →
pargo © (2006-02-17 16:58) [17]Игорь Шевченко © (17.02.06 16:56) [16]
Спасибо, попробую.
← →
RO (2006-02-17 17:01) [18]Если то был ты, Игорь - прекращаю.
← →
Игорь Шевченко © (2006-02-17 17:08) [19]
> Если то был ты, Игорь - прекращаю.
С просьбой - Я.
← →
pargo © (2006-02-17 17:33) [20]Игорь Шевченко © (17.02.06 16:56) [16]
Огромное спасибо ! Помогло: "Если код очень большой, то сделай его маленьким"
В одном из присоединяемых юнитов в uses оказался ShareMem.
( Убей бог, не помню зачем я его туда засунул :)) )
Убрал и все заработало.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c