Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
8-1091222553
d10
2004-07-31 01:22
2004.10.31
Проблема с 32 битами на DirectX JEDI, IDirectDraw7


9-1088090322
Creep
2004-06-24 19:18
2004.10.31
Арканоид


1-1097561439
-=SS=-
2004-10-12 10:10
2004.10.31
Изменение цвета кнопки


1-1097747889
V l a d i m i r
2004-10-14 13:58
2004.10.31
TRadioGroup


1-1098078732
Павел
2004-10-18 09:52
2004.10.31
Автопрорисовка Формы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский