Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.01;
Скачать: CL | DM;

Вниз

Проблемы с 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
1-1383
Still_Swamp
2003-08-16 18:28
2003.09.01
Как в текте программы заполнить arra of single данными?


14-1548
Maks Realov
2003-08-14 15:51
2003.09.01
Интересно, за что мою ветку убили?


9-1270
BBear
2003-03-01 20:49
2003.09.01
procedure TForum.Destoy;


3-1353
lightix
2003-08-06 10:01
2003.09.01
Как передать ORDER BY в TQuery через параметры?


3-1348
ED
2003-08-06 11:26
2003.09.01
Как в запросе SELECT можно было несколько полей одного типа объед