Главная страница
    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.46 MB
Время: 0.011 c
14-1121951586
Vlad Oshin
2005-07-21 17:13
2005.08.14
Что такое может быть? прием почты по dialup с линуксового севера


3-1120805704
kyn66
2005-07-08 10:55
2005.08.14
Переход с RxDBGrid на DBGridEh


1-1122356559
rentgen
2005-07-26 09:42
2005.08.14
Выбор ячейки в DBGrid


6-1115050639
read_me
2005-05-02 20:17
2005.08.14
получить размер файла из интернета


4-1118573861
Juk
2005-06-12 14:57
2005.08.14
Обработка WM_NCACTIVATE.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский