Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
14-1121840609
Ega23
2005-07-20 10:23
2005.08.14
С днем рождения! 20 июля


4-1119514963
Amid
2005-06-23 12:22
2005.08.14
Как узнать права доступа к папке


1-1122545825
Ирина
2005-07-28 14:17
2005.08.14
Верхний регистр


1-1122487553
RusLAN_
2005-07-27 22:05
2005.08.14
TColor. Сделать цвет темнее/ярчею. Как?


14-1122220561
Gamer
2005-07-24 19:56
2005.08.14
Работа со цветами




   Наверх