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

Вниз

где ошибка при работе с dll   Найти похожие ветки 

 
Dober_m@N ©   (2003-02-24 05:34) [0]

Почему выдаёт ошибку функция при вызове из dll причём сначала всё выводит, а потом ругается типа: class exception EInvalidPointer.... ?

собсно dll ( просто тест на возвращение string"a)
library ct1;

uses
SysUtils,
Classes;

{$R *.res}

function kk(s : string) : string;
begin
result := s;
end;

export kk(s: string) : string;

begin
end.


проект(тоже просто тест):
unit Unit1;

interface

uses
Windows, Forms, Buttons, StdCtrls, Controls, Classes;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1;

function kk(s: string):string; external "ct1.dll";

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
MessageBox(handle, pchar(kk("kkkkkk")), "tttt", 0);
end;

end.


 
Amit ©   (2003-02-24 06:52) [1]

Исправление:
uses
SysUtils,
Classes;

{$R *.res}

function kk(s : string) : string;export;
begin
result := s;
end;

exports kk;

begin
end.


проект(тоже просто тест):
unit Unit1;

interface

uses
Windows, Forms, Buttons, StdCtrls, Controls, Classes;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1;

function kk(s: string):string; external "ct1.dll";

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
MessageBox(handle, pchar(kk("kkkkkk")), "tttt", 0);
end;


 
Dober_m@N ©   (2003-02-24 08:24) [2]

примерно как и раньше сначала выводит потом ругается ...class EInvalidPointer... ?


 
Егорычев Михаил ©   (2003-02-24 09:31) [3]

В DLL:
library ct1;

uses
SysUtils,
Classes;

{$R *.res}

function kk(s : pchar) : pchar;
begin
result := s;
end;

exports kk;


begin
end.

В проэкте:
var
Form1: TForm1;

function kk(s: string):string; external "ct1.dll";

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
MessageBox(handle, StrPas(kk("kkkkkk")), "tttt", 0);
end;

Может быть я с функцией StrPas ошибся вообщем понял - перевод из
PChar в string;


 
Юрий Зотов ©   (2003-02-24 09:46) [4]

> Dober_m@N

Когда Вы создавали проект DLL, то Delphi вставила в него здоровенный комментарий. Как Вы думаете, для чего она это сделала - чтобы Вы его прочитали, или чтобы Вы его удалили, не читая?

См. ShareMem в справке.


 
VAleksey ©   (2003-02-24 11:01) [5]

Повторюсь, но
там был совершенно бесполезный текст на английском языке про ShareMem. Внук (с)



Страницы: 1 вся ветка

Текущий архив: 2003.03.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
3-16896
kalliopiy
2003-02-14 16:23
2003.03.06
Сортировка


3-16943
bavc
2003-02-17 06:42
2003.03.06
Таблица 2 in 1


1-17057
dimdimka
2003-02-24 10:34
2003.03.06
Как хранить текст в рисунке BMP и читать его от туда?


3-16897
Pk
2003-02-14 16:10
2003.03.06
Как сделать чтобы QuickReport


3-16963
Ruf
2003-02-17 11:46
2003.03.06
обновления