Главная страница
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.043 c
1-1122384183
John
2005-07-26 17:23
2005.08.14
перерисовка listbox


1-1122122718
xroot
2005-07-23 16:45
2005.08.14
дебаггер


1-1122475280
REA
2005-07-27 18:41
2005.08.14
WebBrowser и мистика


14-1121793975
NewWonder
2005-07-19 21:26
2005.08.14
Антагонистический класс - что ето?


1-1122357061
Sectey
2005-07-26 09:51
2005.08.14
Есть ли ключ компилятора