Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
ВнизПроблемы с dll Найти похожие ветки
← →
Lex (2003-08-16 07:22) [0]Прочитал статью по адресу
http://www.delphimaster.ru/articles/usedll/index.html
Запустил. При нажатии на button1 вылезло окошко. При нажатии на кнопку OK написано программа выполнила недоступную операцию и будет закрыт. Подскажите, почему?
← →
Skier (2003-08-16 10:49) [1]Что запустил ? Код-то покажи...
← →
Lex (2003-08-16 18:53) [2]DLL:
library mydll;
uses SysUtils, Classes;
function GetSimpleText(LangRus: Boolean): PChar; stdcall;
begin
if LangRus then
Result := PChar("Здравствуй, мир!")
else
Result := PChar("Hello, world!");
end;
exports GetSimpleText;
begin
end.
I-вариант
implementation
function GetSimpleText(LangRus: Boolean): PChar; stdcall; external "MYDLL.DLL";
procedure Button1Click(Sender: TObject);
begin
ShowMessage(StrPas(GetSimpleText(True)));
ShowMessage(StrPas(GetSimpleText(False)));
end;
II-вариант
var
Form1: TForm1;
GetSimpleText: function(LangRus: Boolean): PChar;
LibHandle: THandle;
procedure Button1Click(Sender: TObject);
begin
@GetSimpleText := nil;
LibHandle := LoadLibrary("MYDLL.DLL");
if LibHandle >= 32 then begin
@GetSimpleText := GetProcAddress(LibHandle,"GetSimpleText");
if @GetSimpleText <> nil then
ShowMessage(StrPas(GetSimpleText(True)));
end;
FreeLibrary(LibHandle);
end;
Первый вариант - всё прекрасно, со вторым проблемы.
← →
Skier (2003-08-16 19:47) [3]GetSimpleText: function(LangRus: Boolean): PChar; stdcall;
← →
Lex (2003-08-16 21:46) [4]Спасибо, всё заработало.
← →
Юрий Зотов (2003-08-16 22:07) [5]> Lex (16.08.03 18:53) [2]
Попробуйте подправить GetSimpleText таким образом:
function GetSimpleText(LangRus: Boolean): PChar; stdcall;
var
S: string;
begin
if LangRus then
S := "Здравствуй, мир!"
else
S := "Hello, world!";
Result := PChar(S)
end;
И посмотрите, не возникнет ли при вызове ошибка.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c