Форум: "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.037 c