Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: 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 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
4-1119447130
alkmas
2005-06-22 17:32
2005.08.14
Установка переменной окружения в родительском процессе


1-1122238282
Galiaf
2005-07-25 00:51
2005.08.14
Проблемы с новыми компонентами.


1-1122498912
Olegha
2005-07-28 01:15
2005.08.14
Цвет


14-1122032454
alles
2005-07-22 15:40
2005.08.14
70 кг + 1 л.(воды)=71кг ?


14-1121873134
drakoga
2005-07-20 19:25
2005.08.14
Где в Делфи7 компонент NMSMTP