Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 10:47 28.06.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема какво не му е наред !! помогнете  
Автор Nova_tt (непознат )
Публикувано07.06.06 12:52



моля помогнете , това е един прост DLL и не мога да го компилрам .
с Делфи 7 съм. не знам дали това е бедата. трябва ми просто една функция ка качва файл на FTP . ако може някой да помогне с друга идея ще съм много благодарен .
ето кода :

// IdBaseComponent, IdComponent,
// IdTCPConnection, IdTCPClient, IdFTP;

Function PutFileToFTP(filename:string;host_url:string;Login:string ,Password_:string;wwwfile:string):boolean;
var IdFTP_x: TIdFTP;
er:Tfilestream;
begin
try
IdFTP_x:=TIdFTP.Create(nil);
with IdFTP_x do begin
Password:=Password_;
User:=Login;
Host:=host_url;
SocksInfo.Password:=Password_;
SocksInfo.UserID:=Login;
SocksInfo.Port:=21; // ïîðò
SocksInfo.Host:=host_url;
Connect(true);

if Connected then begin
if fileage(filename)<>-1 then begin
try
er:=Tfilestream.Create(filename,fmOpenRead);
Put(er,wwwfile);
finally
er.Free;
end;
end;
end;
end;
finally
IdFTP_x.Free;
end;


end;



Тема Re: какво не му е наред !! помогнетенови [re: Nova_tt]  
Автор Dim_cR (непознат)
Публикувано07.06.06 13:23



Мисля, че за качването на файл не е нужно да се товари програмата с Indy. Достатъчно функции предлага и wininet:

uses ....., wininet;

Function PutFileToFTP(filename:string;host_url:string;Login:string ,Password_:string;wwwfile:string):boolean;
var intconn,intopen : hinternet;

begin

intopen := internetopen(PChar(Application.Title),INTERNET_OPEN_TYPE_DIRECT,nil,nil,0);
intconn := internetconnect(intopen,pchar(host_url),21,pchar(Login),pchar(Password_),INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
ftpputfile(intconn,pchar(filename),pchar(wwwfile),FTP_TRANSFER_TYPE_UNKNOWN,0);
if getlasterror() = 0 then begin //check if ftp server worked (ftp is online)
internetclosehandle(intopen);
Result:=True;
end;

end;



Тема Използване на string в dllнови [re: Dim_cR]  
Автор andrew_nikoloff (bugbuster)
Публикувано07.06.06 13:42



Само да ви обърна внимание върху едно нещо - когато предавате към/от dll дълги стрингове (под дълги разбирай тип string, а не че имат много символи вътре), динамични масиви, обекти, които създават такива неща и т.н. трябва да включите юнита ShareMem на първо място в uses клаузата на dll-а и на проекта. Отбелезвам го, понеже примерите и на двама ви са с параметри от тип string. Или най-добре използвайте параметри тип ShortString или PChar, като паметта за PChar-а трябва да си я резервираш и освобождаваш в приложението.
В хелпа тия въпроси са доста добре обяснени.



Тема Re: Използване на string в dllнови [re: andrew_nikoloff]  
Автор Dim_cR (непознат)
Публикувано07.06.06 13:47



Izpolzvah definiciqta na Nova_TT. V moq primer e po-dobre oshte v deklaraciqta vsichko da e PChar(ide rech vse pak za WinAPI).

Редактирано от Dim_cR на 07.06.06 13:49.



Тема Re: Използване на string в dllнови [re: Dim_cR]  
Автор Nova_tt (непознат )
Публикувано07.06.06 15:11



Благодаря много и на двамата. Сега пробвам примера който ми предложи, компилира се нормално ( моя само грешки :( ) , но забива като извикам функцията, сега или ще сменя "string" с "pchar" или ще пробвам с ShareMem



Тема Re: Използване на string в dllнови [re: andrew_nikoloff]  
АвторЛюбoзнaтeлko (Нерегистриран)
Публикувано07.06.06 16:01



А това важи ли също и за стрингове, когато те се използват само вътре в DLL, например в тялото на функция и/или се предават между функции, обекти, дефинирани вътре в DLL-а?!? Няма експорт извън модула.



Тема Re: Използване на string в dllнови [re: Любoзнaтeлko]  
Автор andrew_nikoloff (bugbuster)
Публикувано07.06.06 19:58



В хелпа се казва следното:
If a DLL exports routines that pass long strings or dynamic arrays as parameters or function results (whether directly or nested in records or objects), then the DLL and its client applications (or DLLs) must all use the ShareMem unit. The same is true if one application or DLL allocates memory with New or GetMem which is deallocated by a call to Dispose or FreeMem in another module. ShareMem should always be the first unit listed in any program or library uses clause where it occurs.

ShareMem is the interface unit for the BORLANDMM.DLL memory manager, which allows modules to share dynamically allocated memory. BORLANDMM.DLL must be deployed with applications and DLLs that use ShareMem. When an application or DLL uses ShareMem, its memory manager is replaced by the memory manager in BORLANDMM.DLL.


Или отговорът на твоя въпрос е - не, в такъв случай не е нужно



Простичко казано въпросът е в това, че паметта, заделена за един динамичен обект от приложението може да бъде освободена, въпреки че тя се ползва в DLL-а. Това е по простата причина, че мемори мениджъра няма как да знае за референцията, която е в DLL-а. Обратното също е вярно. Именно това е ролята на Borland Memory Manager-а (BorlandMM.DLL) - да обедини управлението на паметта в двата (или повече) модули.



Тема Re: Използване на string в dllнови [re: andrew_nikoloff]  
АвторЛюбoзнaтeлko (Нерегистриран)
Публикувано09.06.06 11:11



Благодаря много!
Мислих си аз такива неща, но едно "рамо" да получа си е друго


Още веднъж - Tnx!



Тема Re: Използване на string в dllнови [re: Любoзнaтeлko]  
АвторDaniel (Нерегистриран)
Публикувано11.06.06 15:49



А освен PChar, може да се подаде и widestring, върши същата работа (при викане на функции от DLL).




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.