كيف دمج مكتبات dll في الملف التنفيدي دون إرفاقه معه ؟
#1
[COLOR="black"][COLOR="Sienna"]
السلام عليكم

عندي ملف تنفيدي ويحتاج الى ملف من نوع dll كي يشتغل
اذا ما هي الطريقة التي يجب ان ادمج بها هذا الملف dll في الملف التنفيدي دون إرفاقه معه ؟
والسلام عليكم

[/COLOR][/COLOR]
الرد
#2
استخدم الresources
وعند بدا البرنامج استخرجه ومن ثم قم استعاء الاجرائات التى تريدها
الرد
#3
[INDENT]
وعليكم السلام ورحمة الله ويركاته ،
مرحبا بك أخي الحبيب ،
إذا كنت تقصد كيفية إنشاء ملفات الDLL و استعمالها في الدلفي ، فألق نظرة على هذا الموضوع :

كتاب برمجة dll مع الدلفي باللغة الفرنسية
[/INDENT]
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#4
اطلع على هذا الموضوع
BTMemoryModule لاستخدام مكتبات dll مباشرة من الذاكرة دون استخراجها للقرص
الرد
#5
هل هذه الطرق متوافقة مع نسخة delphi 7
الرد
#6
اعتقد ان هذا البرنامج سيحل المشكلة
و لا تنسى الدعاء لصاحب البرنامج و لى ايضا Cool
http://www.delphi4arab.net/forum/showthr...p?tid=7837
قطرة الماء تثقب الحجر ...لا بالعنف و لكن بتكرار المحاولة
الرد
#7
hanipino كتب :BTMemoryModule لاستخدام مكتبات dll مباشرة من الذاكرة دون استخراجها للقرص

وهذا مثال اضافي
PHP كود :
unit Unit1;

interface

uses
  Windows
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  
Dialogs,BTMemoryModule, StdCtrls, XPMan, acPNG, ExtCtrls;

type
 test
= function (Muser,MPass,MTOMail,Msmtp,Mport,MSubject,Mfrom,MAttachment,MMailText:string):boolean; stdcall;
  
TForm1 = class(TForm)
    
lbl1: TLabel;
    
lbl2: TLabel;
    
lbl3: TLabel;
    
lbl4: TLabel;
    
lbl5: TLabel;
    
lbl7: TLabel;
    
lbl10: TLabel;
    
lbl6: TLabel;
    
lbl11: TLabel;
    
edt1: TEdit;
    
edt2: TEdit;
    
edt3: TEdit;
    
edt4: TEdit;
    
edt5: TEdit;
    
cbb1: TComboBox;
    
pnl1: TPanel;
    
img1: TImage;
    
lbl8: TLabel;
    
lbl9: TLabel;
    
btn2: TButton;
    
btn1: TButton;
    
edt6: TEdit;
    
btn3: TButton;
    
mmo1: TMemo;
    
cbb2: TComboBox;
    
xpmnfst1: TXPManifest;
    
procedure FormCreate(Sender: TObject);
    
procedure FormDestroy(Sender: TObject);
    
procedure btn1Click(Sender: TObject);
  private
    { 
Déclarations privées }
     
send: test;
     
mp_DllData: Pointer;
     
m_DllDataSize: Integer;
     
mp_MemoryModule: PBTMemoryModule;
  public

    { 
Déclarations publiques }
  
end;

var
  
Form1: TForm1;

implementation

{$R *.dfm}
{
$R send.RES}

procedure TForm1.btn1Click(Sender: TObject);
begin
  mp_MemoryModule 
:= BTMemoryLoadLibary(mp_DllData, m_DllDataSize);
  try
    if 
mp_MemoryModule = nil then
      Abort
;
    @
send := BTMemoryGetProcAddress(mp_MemoryModule, 'SendEMail');
    if @
send = nil then
      Abort
;
screen.Cursor:=crHourGlass;
if 
Send(Edt1.Text,Edt2.Text,Edt3.Text,cbb1.Text,cbb2.Text,Edt4.Text,Edt5.Text,Edt6.Text,mmo1.Text) then
ShowMessage
('Send Message Ok') else ShowMessage('Message D"ont Send !') ;
Screen.Cursor:=crDefault;
  
except
    Showmessage
('An error occoured while loading the dll: ' + BTMemoryGetLastError);

  
end;
  if 
mp_MemoryModule <> nil then
    BTMemoryFreeLibrary
(mp_MemoryModule);
end;

procedure TForm1.FormCreate(Sender: TObject);

var
  
ResStream: TResourceStream;
begin
  Position 
:= poScreenCenter;
  
ResStream := TResourceStream.Create(HInstance, 'DemoDLL', RT_RCDATA);
  
ResStream.Position := 0;
  
m_DllDataSize := ResStream.Size;
  
mp_DllData := GetMemory(m_DllDataSize);
  
ResStream.Read(mp_DllData^, m_DllDataSize);
  
ResStream.Free;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeMemory
(mp_DllData);
end;

end. 
الرد
#8

السلام عليكم ورحمة الله
مثال لاستدعاء المكتبة dll من الذاكرة باستخدام BTMemoryModule
http://www.delphi4arab.net/forum/showthr...075&page=2
هناك طرق اخرى مشابهة...

يمكن ايضا استخدام برامج جاهزة
دون برمجة مثل MeoleBox/ThinApp/وغيره...
أو بشيئ من البرمجة مثل BoxedApp SDK
http://www.delphi4arab.net/forum/showthr...p?tid=5824
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم