Обсуждение Программирование на Delphi/Pascal

D

De[M]oN

Есть функция LoadLibrary, она загружает в память DLL, но для неё входным параметром должно быть имя файла.
Есть ли похожая функция, но чтобы загружать DLL не с диска, а напрямую из памяти, например из TMemoryStream?
нужно загружать DLL из файла ресурсов и загружать её в память, без сохранения на диск.
 

NeDima

Ословед
интересуюсь реализациями алгоритмов сжатия

Раньше с самой Delphi шла ZLib с исходниками (как сейчас не помню).
Я ей ресурсы вcякие сжимал и в MemoryStream распаковывал.
ZLib.rar 92.44 Кб [56-59]

p.s. Старый телефонный справочник получался одним файлом и меньше 3-х Мб:)
а это тел.справочник
PhoneXP.exe 2.26 Мб [56-59]
 

Bob

Ословед
De[M]oN;4350081 написал(а):
нужно загружать DLL из файла ресурсов и загружать её в память, без сохранения на диск.

Если посмотреть внутрь LoadLibraryEx, то там все довольно примитивно-
вызываются эти ф-и из kernel32: BaseComputeProcessDllPath, LdrLoadDll и еще несколько неопознанных.
Думаю если замапить твой ресурс в память, а потом скормить его этим функциям, то они его проглотят как родного.
Ну либо опять же мапить ресурс в память, вычислять вручную все релокации, настраивать таблицу импорта, и потом из таблицы экспорта выбирать адреса нужных тебе функций. Как правильно сказал товарищ x3r0x - "Ужас" ;)

PS. А в чем проблема на винт сохранить ресурс то ?
 
D

De[M]oN

как я понял, это надо лезть в адресное пространство другой программы, так как эту библиотеку должна загрузить другая программа. Внедриться в нее и управляя работать с библиотекой! Ужас! :crazy2:
Мне нужно запустить её из своего процесса, чтобы при закрытии процесса ДЛЛ тоже выгрузилась.

PS. А в чем проблема на винт сохранить ресурс то ?
Чтобы не оставлять там мусор, некоторые длл после завершения почему то не удаляются,
хотя в программе на этот случай написано добавлять "_" в имя файла пока такой существует и попытаться удалять предыдущий.
Вобщем хотелось бы без файловых операций, всё в памяти сделать...
пытался InjectDll в свой процесс, какие то проблемы были, буду ещё его пробовать
 
Господа программеры, случаем не завалялись ли у кого-нить исходники html редактора на Делфи?
Нужно просто посмотреть, как хоть оно выглядит.
 
D

De[M]oN

Господа программеры, случаем не завалялись ли у кого-нить исходники html редактора на Делфи?
Нужно просто посмотреть, как хоть оно выглядит.
Что именно интересует? Есть такие компоненты SynEdit,
в состав которых входят Edit Memo и др компоненты,
но с возможностью подсветки синтаксиса, в т.ч. html
 
De[M]oN;4459447 написал(а):
Что именно интересует? Есть такие компоненты SynEdit,
в состав которых входят Edit Memo и др компоненты,
но с возможностью подсветки синтаксиса, в т.ч. html

интересует всё :)
так как нужно сделать такой редактор, а как он делается даже примерно не знаю.
хочу хоть взглянуть как оно...
 

sevat

Самец :)
Народ вопрос жизни и смерти, оч нуна браузер написать, мб у кого нить есть исходники или подскажите какими элементами в делфи делаетси он
 
D

De[M]oN

Народ вопрос жизни и смерти, оч нуна браузер написать, мб у кого нить есть исходники или подскажите какими элементами в делфи делаетси он
Internet> TWebBrowser

Нашёл у себя пример какой то старый, браузера :)
 

Kolhan

Ословед
Помогите с проблемой
у меня есть программа ехе файлик, в ней я делаю необходимые настройки, можно сделать чтобы ехе-шник запоминл их - не используя никакие ини файлы и настройки реестра
 
D

De[M]oN

Помогите с проблемой
у меня есть программа ехе файлик, в ней я делаю необходимые настройки, можно сделать чтобы ехе-шник запоминл их - не используя никакие ини файлы и настройки реестра
А в чём проблема ини файлов или реестра?
Можно конечно в самого себя писать данные, но это не удобно :)
 

Larry_

Ословед
Помогите с проблемой
у меня есть программа ехе файлик, в ней я делаю необходимые настройки, можно сделать чтобы ехе-шник запоминл их - не используя никакие ини файлы и настройки реестра
То есть, ты хочешь, чтобы твоя программа поставлялась только одним экзешником? ИМХО, наиболее удобный способ использовать реестр для хранения настроек. Хотя ты можешь писать настройки и в сам exe-файл. В сборнике советов DelphiWorld я видел пример, позволяющий программе писать данные в саму себя. DelphiWorld можешь скачать отсюда:
Delphiworld.exe 22.46 Мб [96-99]
 

Kolhan

Ословед
De[M]oN;4466402 написал(а):
А в чём проблема ини файлов или реестра?
Можно конечно в самого себя писать данные, но это не удобно :)

проблема в том что ини файл не нужен - нужен только 1 файл - а на реестр может не хватать прав
 
De[M]oN;4470885 написал(а):
А разве на HKEY_CURRENT_USER может не быть доступа? Вроде он доступен в любом случае...
Ммм... В случае терминального доступа можно и не получить этих прав. Сталкивался с этим при написании шедулера, пришлось переходить на инишники.

По сабжу - если вопрос заключается в хранении учеток юзверей к примеру, то лучше не извращаться и писать инишник в папку конкретного юзверя - вероятность, что там кто-то чего-то будет искать очень маловероятна.

К примеру x:\Documents and Settings\имя юзверя\Application Data\ как этим и занимаются большинство приличных программ :)
 
D

De[M]oN

К примеру x:\Documents and Settings\имя юзверя\Application Data\ как этим и занимаются большинство приличных программ :)
Ниже описанная функция вернёт результат, типа:
C:\Documents and Settings\<Имя пользователя>\Мои документы
Код:
//Зависимости: ComObj, ShlObj

function GetPersonal:string;
var
 buf:Pchar;
 IDL:PItemIDList;
begin
 GetMem(buf,MAX_PATH);
 try
   OleCheck(SHGetSpecialFolderLocation(0,CSIDL_PERSONAL,IDL));
   if SHGetPathFromIDList(IDL,buf) then
     Result:=StrPas(buf)
   else
     Result:='C:\';
 finally
   FreeMem(buf);
 end;
end;
 
по поводу куда файлик прописать... пишу словами ибо делфей на линух пока не стал втыкать.
В винде cmd команда set выводит список переменных окружения (кажись прально сказал). в том же DelphiWorld или drkb посмотри как с ними правильно работать или через shellExecute например %DATE%
 
Сверху