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

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

Процедура в библи-ке [D7, WinXP]


Adolf ©   (2005-07-20 00:32:00) 

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

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

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


Adolf   (2005-07-24 00:03:00) [1]

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


Alexander Panov   (2005-07-23 01:03:00) [2]

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


+22Кб.


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

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

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

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


Anatoly Podgoretsky   (2005-07-22 09:30:00) [4]

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


evvcom   (2005-07-22 09:21:00) [5]


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

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


Adolf   (2005-07-22 00:26:00) [6]

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


alex-drob   (2005-07-21 01:47:00) [7]


> Adolf   (21.07.05 01:09) [5]

Зделай как в

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


Adolf   (2005-07-21 01:09:00) [8]

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


Defunct   (2005-07-20 02:34:00) [9]

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


Defunct   (2005-07-20 02:32:00) [10]

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

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


Alexander Panov   (2005-07-20 00:57:00) [11]

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

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

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;


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


alex-drob   (2005-07-20 00:44:00) [12]

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


Наверх

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