Вниз
Скачать: CL | DM;

Процедура в библи-ке   Найти похожие ветки 

← →
Adolf   (2005-07-20 00:32) [0]

Процедура в библи-ке не работает

procedure Test(Text: PChar);stdcall;
var s: PChar;
begin
s:="Testing";
Text:=s;
end;

Как можно в Text поместить s ?


← →
alex-drob   (2005-07-20 00:44) [1]

А что не работает?


← →
Alexander Panov ©   (2005-07-20 00:57) [2]

Напиши, что ты реально хочешь сделать.

Для твоего примера задачу можно решить примерно так:

1. В проект и в DLL в Uses первым модулем добавляешь ShareMem. В этом случае твоя функция будет работать без изменений.

2. Примерно так.

В DLL:

procedure Test(Text: PChar;Len: Integer);stdcall;
var
 s: String;
begin
 s := "Testing";
 s := Copy(s,1,Len-1);  //Ограничение длины
 StrPCopy(Text,s);
end;


В основной программе:

function GetStr: String;
var
 ps: PChar;
begin
 ReallocMem(ps,20);
 try
   Test(ps,20);
   Result := Copy(ps,1,StrLen(ps));
 finally
   FreeMem(ps);
 end;
end;


Это лишь общая идея. Принцип такой: где память выделяется(напр. в основной программе, там она и должна освобождаться).


← →
Defunct ©   (2005-07-20 02:32) [3]

> Как можно в Text поместить s ?

Поставить var?
procedure Test(var Text: PChar);stdcall;


← →
Defunct ©   (2005-07-20 02:34) [4]

и использовать String/ShortString
PChar - unsafe type, его не рекомендуется использовать


← →
Adolf   (2005-07-21 01:09) [5]

Извеняюсь, вопрос задал боком :)
Делаю плагин(макросы) для своей программы, т.е. в плагин поступает строка с текстом, плагин изменяет текст и возвращает измененный текст проге. Как это лучше сделать при том чтоб плагины можно было также писать на C++?


← →
alex-drob   (2005-07-21 01:47) [6]


> Adolf   (21.07.05 01:09) [5]

Зделай как в

> Defunct ©   (20.07.05 02:32) [3]


← →
Adolf   (2005-07-22 00:26) [7]

А как в C++ написать эту же функцию? Просто я недавно начал писать на С++...


← →
evvcom ©   (2005-07-22 09:21) [8]


> Зделай как в
> > Defunct ©   (20.07.05 02:32) [3]

Нет! Сделай как в API. Alexander Panov ©   (20.07.05 00:57) [2] показал как это правильно делается.


← →
Anatoly Podgoretsky ©   (2005-07-22 09:30) [9]

Adolf   (21.07.05 01:09) [5]
Процедуры не возвращают значений


← →
Adolf   (2005-07-23 00:10) [10]

2Anatoly Podgoretsky ©
Я знаю... Просто по другому не напишиш... :)

Вот что я понял:
PChar - unsafe type
String - не работает
ShortString - слишком short
WideString - работает, но как в string переводить?
ShareMem - + лишняя библиотека

Хорошего выбора нет... :)


← →
Alexander Panov ©   (2005-07-23 01:03) [11]

Adolf   (23.07.05 0:10) [10]
ShareMem - + лишняя библиотека


+22Кб.


← →
Adolf   (2005-07-24 00:03) [12]

Спасибо за помощь!
Удачи вам всем...



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
14-1122266581
WondeRu
2005-07-25 08:43
2005.08.14
DELPHI DIAGRAM PORTFOLIO(*.ddp) -абсолютно бесполезная штуковина?


14-1122043909
Piter
2005-07-22 18:51
2005.08.14
Black Sabbath


14-1121848754
|imp|
2005-07-20 12:39
2005.08.14
Факс на delphi


14-1121998201
SoftX
2005-07-22 06:10
2005.08.14
Запишите свой пароль!


14-1121774126
SergP.
2005-07-19 15:55
2005.08.14
Помогите с PHP




   Наверх