Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];

Вниз

где ошибка при работе с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.01 c
14-17291
SPeller
2003-02-11 19:47
2003.03.06
---|Ветка была без названия|---


1-17127
AZ
2003-02-22 09:40
2003.03.06
Запрет выбора компонента <B>курсором</B> в DesignTime


3-16974
AnnReal
2003-02-17 16:26
2003.03.06
Выделение строк в DBGrid двойным щелчком мышы


1-17009
iusup
2003-02-24 23:30
2003.03.06
Почему выдает ошибку...? Где не правильно...?


1-17111
Smok_er
2003-02-25 01:17
2003.03.06
Простейший unzip





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