Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизКуда пропадают сиволы? Найти похожие ветки
← →
k@rt © (2004-05-23 21:38) [0]Делаю так
type
TPluginMain = function ({...}var AllText{...}: PChar): Integer; stdcall;
const
csPluginMain = "PluginMain";
{...}
// Код в программе ------------------------------------------//
function mPluginRun({...}var S: String): TPluginModifiedData;
var
hPlugin: Integer;
{...}
plRes: Integer;
AllText: PChar;
{...}
begin
{...}
hPlugin := LoadLibrary(PChar(PluginPath));
{...}
@Main := GetProcAddress(hPlugin, csPluginMain);
{...}
AllText := PChar(S);
// Length(AllText) = 500 000
plRes := Main(AllText);
// Length(AllText) = 15 000 - почему?
S := StrPas(AllText);
{...}
FreeLibrary(hPlugin);
end;
// Код в Dll ------------------------------------------//
function PluginMain({...}var AllText: PChar): Integer; stdcall;
var
S: String;
begin
S := AnsiString(AllText:
// Length(S) = 500 000
// Издеваюсь над текстом
AllText := PChar(S);
// Length(AllText) = 500 000
Result := plModAllText;
end;
Куда пропадают ~485 000 символов. И как этого избежать?
← →
k@rt © (2004-05-23 21:39) [1]{...} - это я ненужное отрезал...
← →
bars © (2004-05-23 21:46) [2]Попробуй ShareMem в uses поставить как к dll так и к приложению (на первое место)
← →
k@rt © (2004-05-23 23:37) [3]//Bars
Не помогает.
← →
Cobalt © (2004-05-24 00:57) [4]А что, если попробовать использовать эту же функцию в проге, а не в плагине? Будет такая же утечка?
Если нет - знчит что-то с выделением памяти.
Если да - значит, нужно более тщательно смотреть код.
Кстати, а содержимое текста, того, что ты возвращаешь из плагина, и того, что ты получаешь в основной проге, хотя бы в первых 15000 совпадают?
Если совпадают, то не попадают ли в текст символы #0?
← →
jack128 © (2004-05-24 03:27) [5]Уж сколько раз твердили миру, НУ НЕЛЬЗЯ ВОЗВРАЩАТЬ ИЗ ФУНКЦИИ PChar(s), ГДЕ s - ЛОКАЛЬНАЯ ПЕРЕМЕННАЯ. s - уничтожится при выходе из функции и получим битый указатель..Посмотри как в Api реализован возврат PChar из dll, например GetWindowText и тому подобное...
← →
k@rt © (2004-05-24 20:07) [6]Все понял! Нужно использовать StrCopy(NewS, PChar(S));
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.03 c