![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В 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 нед.б. указан ни там ни там, но тогда оба проекта д.б. собраны с опцией использования ран-тайм пакетов