Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 в параметрах


Наверх

Титульная страница Поиск, карта сайта Написать письмо