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

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

В DLL не работает процедура со строковыми параметрами [D7, WinXP]


__oleg ©   (2005-02-07 13:49:00) 

Пишу DLL:

uses ShareMem ...

procedure Test(var S: string; var Res: string);
begin
 Res := S + S;
end;

Пытаюсь вызвать функцию в проекте:

procedure XXX;
var S, Res: string;
begin
 ...
 Test(S, Res);
end;

Вылетает Access violation.
Подскажите, как можно передавать строки в DLL и получать из DLL ?
Заранее спасибо.


Anatoly Podgoretsky   (2005-02-07 14:58:00) [1]

Это не обязательное условие, ты опять не привел полные данные, объявление процедуры в программе. Должно быть одинаковым и совсем не обязательно stdcall


__oleg   (2005-02-07 14:50:00) [2]

Ой ! Забыл указать stdcall при описании процедуры. Каюсь...
Но все равно, спасибо всем !


Digitman   (2005-02-07 14:44:00) [3]


> __oleg


библ-ку RCalc как линкуешь ? динамически ? статически ?
покажи в коде ..


Владислав   (2005-02-07 14:39:00) [4]

В главном юните вот это откуда:
Test(C, R); // Access violation
?


__oleg   (2005-02-07 14:25:00) [5]

Уточняю: есть проект-dll:

library RCalc;

uses
 ShareMem, SysUtils,
 Classes, UnitsConv, uSymCodes, uRCalcTypes,
 Math, MyMath, MyFunc, uGasPP, uCalcErr;

{$R *.res}

procedure Test(var S: string; var Res: string);
begin
 Res := S + S;
end;

exports
 Test;
begin
end.

И есть основной проект:

program _test;
uses ShareMem, ...

В главном юните проекта пробую вызывать процедуру из DLL:

procedure TForm1.Button1Click(Sender: TObject);
var C, R: string;
begin
 ...
 C := 'ab';
 R := '';
 Test(C, R); // Access violation
end;
...

В обоих проектах опция "Build with runtime...." выключена.


Юрий Зотов   (2005-02-07 14:01:00) [6]

В EXE вставлено ShareMem тоже?


Digitman   (2005-02-07 14:01:00) [7]


> Пытаюсь вызвать функцию в проекте


Sharemem д.б. указан первой позицией в uses обоих dpr.

Либо Sharemem нед.б. указан ни там ни там, но тогда оба проекта д.б. собраны с опцией использования ран-тайм пакетов


Наверх

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