Текущий архив: 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