Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.057 c
8-1091407249
widoms
2004-08-02 04:40
2004.10.31
Компоненты для работы с изображениями.


1-1097575249
dreams
2004-10-12 14:00
2004.10.31
Как определить момент изменения размера колонки в Listview


1-1097843033
Саша
2004-10-15 16:23
2004.10.31
Разрыв слитной строки в DrawText


4-1096021148
Antonmm2
2004-09-24 14:19
2004.10.31
Форматирование диска


1-1097739102
Chris
2004-10-14 11:31
2004.10.31
работа с MSWord через OLE




   Наверх