Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание и использование DLL


dolmat ©   (2005-11-29 10:48:00) 

Пробую запихнуть одну функцию в DLL. Раньше никогда не занимался подобным. Что я делаю не так?
library z_cod;

uses
 SysUtils,
 Classes;

{$R *.RES}

function z_code(s:ShortString):ShortString; stdcall;
var zc:string[1];
zk,zk1:longint;
begin
zk:=strtoint(s);
zk1:=zk mod 11;
if zk1=0 then zc:='5'
else if zk1=10 then zc:='0'
else zc:=inttostr(zk1);
z_code:=zc;
end;

exports

z_code name 'z_code';
begin
end.

И использование
unit Unit2;

interface
function z_code(i:ShortString):ShortString; external 'z_cod.dll';

implementation

end.

unit Unit1;

interface

uses
 ShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, unit2;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s:string[1];
begin
s:=z_code('3121001');
end;
end.

Постоянно возникает Access volidation at adres 00331FE9 in module z_cod.dll


jack128   (2005-11-29 14:30:00) [1]

dolmat   (29.11.05 10:48)
function z_code(s:ShortString):ShortString; stdcall;

Модификатором const не избегайте пользоваться.


begin...end   (2005-11-29 13:03:00) [2]

> dolmat   (29.11.05 12:46) [7]

Уберите ShareMem.


Anatoly Podgoretsky   (2005-11-29 12:49:00) [3]

Это уже к этому не относится


dolmat   (2005-11-29 12:46:00) [4]

begin...end ©   (29.11.05 10:54) [1]
Заработало. Только теперь при выходе из программы "Rantime error 217"
Это чего нужно?


wal   (2005-11-29 11:45:00) [5]


> А где здесь ShareMem?
А зачем он здесь?


Ega23   (2005-11-29 11:40:00) [6]


> А где здесь ShareMem?


Он же ShortString использует...


evvcom   (2005-11-29 11:39:00) [7]


> library z_cod;
>
> uses
>  SysUtils,
>  Classes;

А где здесь ShareMem?


Ega23   (2005-11-29 11:07:00) [8]

Попробуй так:

function z_code(s:ShortString):ShortString; stdcall;
var
zk,zk1:longint;
begin
Result:=s;
zk:=strtoint(s);
zk1:=zk mod 11;
if zk1=0 then Result:='5'
else if zk1=10 then Result:='0'
end;


Ega23   (2005-11-29 11:05:00) [9]


> else zc:=inttostr(zk1);


Здесь вылет?


begin...end   (2005-11-29 10:54:00) [10]

По меньшей мере, добавьте stdcall в описание функции в EXE или уберите его из описания в DLL.


Наверх

Титульная страница Поиск, карта сайта Написать письмо