Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1085214015
AlexG
2004-05-22 12:20
2004.06.06
Кто-нибудь встречался с ошибкой Excel?


3-1084527737
}|{yk
2004-05-14 13:42
2004.06.06
Никто не знает как поще преобразовать timestamp в строку типа


3-1084512067
evgen
2004-05-14 09:21
2004.06.06
Как зделать так что в выподающем списке сохронялись старые данные


3-1084723034
Oxer
2004-05-16 19:57
2004.06.06
Связи м/у таблмцами ("ручное" изменение значения ключа)


1-1085359965
Алекс А
2004-05-24 04:52
2004.06.06
Существуют ли конверторы кода с Дельфи на BCB и обратно?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский