Главная страница
    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.035 c
1-1098176351
starik30
2004-10-19 12:59
2004.10.31
Обмен между потоками


14-1097664594
Demetrius2003
2004-10-13 14:49
2004.10.31
Исходник joiner a


14-1097137982
КаПиБаРа
2004-10-07 12:33
2004.10.31
Пишу ТЗ.


14-1097424048
Голодный
2004-10-10 20:00
2004.10.31
Заработок


3-1096910507
normandia
2004-10-04 21:21
2004.10.31
получить в delphi набор строк от встроенной процедуры interbase





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский