Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

DLL: Privileged instruction !!!   Найти похожие ветки 

 
Луарвик   (2004-09-27 23:21) [0]

Че за фигня такая?
Вызываю процедуру так:
{Пытаемся загрузить библиотеку}
 LibHandle := LoadLibrary("Project1.dll");
 {Если все OK}
 if LibHandle >= 32 then begin
   {...то пытаемся получить адрес функции в библиотеке}
   @GetSimpleText := GetProcAddress(LibHandle,"GetSimpleText");
   {Если и здесь все OK}
   if @GetSimpleText <> nil then
     {...то вызываем эту функцию и показываем результат}
     {ShowMessage(StrPas(}GetSimpleText(True){))};
 end;
 {И не забываем освободить память и выгрузить DLL}
 FreeLibrary(LibHandle);

Это в библиотеке:

library Project1;
Uses SysUtils;  
{$R *.RES}  

function GetSimpleText(LangRus: Boolean): PChar; stdcall;
begin
 {В зависимости от LangRus возвращаем русскую (True) либо английскую (False) фразу}
 if LangRus then
   Result := PChar("Здравствуй, мир!")
 else
   Result := PChar("Hello, world!");
end;

{Директива exports указывает, какие функции будут экспортированы этой DLL}
exports GetSimpleText;

Begin  
End.  

Че такое?


 
Defunct ©   (2004-09-28 00:04) [1]

function GetSimpleText(LangRus: Boolean): ShortString;

Учимся читать комментарии при создании DLL


 
Defunct ©   (2004-09-28 00:06) [2]

В ту же степь:

Учимся читать подсказки(Hints) и предупреждения(Warnings) компилятора.


 
Луарвик   (2004-09-28 00:11) [3]

Ага, тут вот оно как:
ShowMessage(StrPas(GetSimpleText(True)));
А GetSimpleText я описал так:
function(LangRus: Boolean): PChar;
Уже выдает такую ошибку: "Privileged instruction at 0x009ebcbc"


 
Defunct ©   (2004-09-28 00:16) [4]

смотрите
http://delphimaster.net/view/1-1095698261/
пост [11]

function(LangRus: Boolean): PChar;
Вот именно в этом и ошибка.


 
Луарвик   (2004-09-28 00:23) [5]

В чем именно? PChar нельзя юзать в DLL?


 
Луарвик   (2004-09-28 00:27) [6]

Ага, понял!!! Вот как надо было:
var
 Form1: TForm1;
 GetSimpleText: function(LangRus: Boolean): PChar;stdcall;

Пасибо!


 
Defunct ©   (2004-09-28 00:45) [7]

PS: PChar тоже лучше не использовать, а то могут появиться другие ошибки см.[1, 2]. К тому же PChar помоему требует явного освобождения памяти при таком использовании как у вас (насчет последнего могу и ошибаться), но все равно лучше не рисковать.


 
GuAV ©   (2004-09-28 01:44) [8]


> К тому же PChar помоему требует явного освобождения памяти
> при таком использовании как у вас

не-а. строки будут константами вставленными в код. память явно не выделяется и явного освобождения не требует, при попытке освободить будет AV.

> PS: PChar тоже лучше не использовать

PChar как раз можно.


 
GuAV ©   (2004-09-28 01:47) [9]


> при попытке освободить будет AV.

не уверен точнее что непременно будет но по крайней мере возможно.


 
Игорь Шевченко ©   (2004-09-28 10:19) [10]


>  К тому же PChar помоему требует явного освобождения памяти
> при таком использовании как у вас (насчет последнего могу
> и ошибаться), но все равно лучше не рисковать.


Матчасть учить.


 
Суслик ©   (2004-09-28 11:55) [11]

2defunct
Ты, братец, советуешь в очередной раз фиг знает что.
Что за манера? :-\


 
Defunct ©   (2004-09-28 12:32) [12]

посмотрю я когда там будут динамические строки вместо этих "Hello world", тада вспонится и матчасть, и манера.


 
Игорь Шевченко ©   (2004-09-28 12:34) [13]

Defunct ©   (28.09.04 12:32) [12]

Матчасть учить. Думать над выученным.


 
Суслик ©   (2004-09-28 12:38) [14]


> 12] Defunct ©   (28.09.04 12:32)
> посмотрю я когда там будут динамические строки вместо этих
> "Hello world", тада вспонится и матчасть, и манера.

Дай тебе попробую объяснить.
Не стоит говорить о том, о чем имеешь неуверенные знания. Ошибаются абсолютно все - такое бывает. Но ты это делаешь регулярно и не признаешь ошибок. Потомоу и совет такой - матчасть.


 
Луарвик   (2004-09-28 15:11) [15]

Гы
Defunct мне говорил не о том, но все же наставил на рабочий пример и я нашел ошибку у себя. Главное, что помог чел! Пасибо!



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1097594672
redlord
2004-10-12 19:24
2004.10.31
buf[0..2048]array of byte и buf array of bute;setlength(buf,204


4-1096011371
Boris
2004-09-24 11:36
2004.10.31
Работа с портами в Delphi 6


14-1097518449
@BraIN
2004-10-11 22:14
2004.10.31
А у нас (канал #delphimaster) установлен рекорд посещаемости - 16


1-1097747903
AllOfDelphi
2004-10-14 13:58
2004.10.31
Биты байты


6-1090995501
DemonRus
2004-07-28 10:18
2004.10.31
Загрузка файл формата .jpg с сайта.