الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

FreeLibrary DLL Free itself ???

مغلق
بدأه tmaaa في 13 يونيو 2002 · 3 رد · 913 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اكرر السؤال مره أخرى واتمنى ان أجد له حل .

كيف يمكن استعمال FreeLibrary داخل ملف الـ DLL بحيث يتم عمل free لنفس ملف الـ DLL دون ان يغلق الـ Process التي تستدعيه .

باختصار DLL free itself دون التاثير على الـ Process التي تحتويه .

باستخدام C++,C لا توجد هذه المشكله لكن مع الدلفي ... :(

(f)

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#2

السلام عليكم

غريبه !!!

لا يوجد احد صادف مثل هذه المشكله من قبل ؟

ام ان السؤال مستواه متدني ولا يوجد من يتنازل ويجيب عليه ؟

ام انه البخل بابداء الرأي ؟

اي رأي ربما يفيد مهما كان ...

(f)

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#3

السلام عليكم

أخي العزيز

قبل قليل قرات السؤال في منتدى اخر (وعرفتك هناك ;)) وقررت ان اطلب منك ايضاح اكثر على السؤال لأحاول ان اساعد لانه ليس لدي معلومات عن هذا الموضوع

اما بالنسبة لقصة السؤال انه منتدي فلا اعتقد ذلك، لانه يدخل في مواضيع متقدمة، وما في حد تاعب راسو كتير بال API اكتر منك ولا خبير فيها زيك :)

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#4

السلام عليكم

ما أقصده :

اريد استدعاء الداله FreeLibrary داخل ملف الـ dll لتقوم بعمل free لنفس الملف ( DLL free itself )

مثال على ذلك :

الكود موجود في احد المواضيع التي كتبتها سابقا , هو الكود الخاص بالحصول على الـ Password **** في Win2k/xp .

 
#include  
BOOL WINAPI __declspec(dllexport)DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved) 
{ 
    POINT hPoint; 
	HWND hParent; 
	char str[256]; 
    switch (fwdreason) 
    { 
        case DLL_PROCESS_ATTACH :  
			GetCursorPos(&hPoint); 
			hParent=WindowFromPoint(hPoint); 
			GetWindowText(hParent,str,256); 
			MessageBox(0,str,"",0); 
			FreeLibrary(hinstDLL);//unmapping library module 
            break; 
        case DLL_PROCESS_DETACH :  
            break; 
        case DLL_THREAD_ATTACH :  
            break; 
        case DLL_THREAD_DETACH :  
            break; 
    } 
    return TRUE; 
}

الكود المقابل له في دلفي

 
library getpwd; 
uses 
  windows,SysUtils; 
function GetModuleHandleFromInstance  :   THandle; 
  var 
    s  :   array[0..512] of char; 
  begin 
    { Find the DLL filename from the instance value. } 
    GetModuleFileName(hInstance, s, sizeof(s)-1); 
    { Find the handle from the filename. } 
    Result  : = GetModuleHandle(s); 
  end; 
var 
tid  :  dword; 
hpoint  :  tpoint; 
hparent  :  hwnd; 
str  :  array[0..256] of char; 
hlong : dword; 
procedure getpassword; 
begin 
   	GetCursorPos(hPoint); 
	hParent : =WindowFromPoint(hPoint); 
        hLong : =GetWindowLong(hParent,GWL_STYLE); 
        GetWindowText(hParent,str,256); 
        if  ((hLong and ES_PASSWORD)=ES_PASSWORD) then 
        messagebox(0,str,'Password  :  ',MB_OK); 
//There is a problem here . Hope I can find the solve for it 
       FreeLibrary(GetModuleHandleFromInstance); 
end; 
procedure DLLMain(AttachFlag :  DWORD); 
begin 
case AttachFlag of 
    DLL_PROCESS_ATTACH :        CreateThread(nil,0,@getpassword,nil,0,tid); 
  end; 
end; 
begin 
  DLLProc  : = @DLLMain; 
  dllmain(DLL_PROCESS_ATTACH); 
end.

عند استخدام ملف الـ DLL المتكون من دلفي فسيؤثر على الـ process المستدعيه له ويقوم باغلاقها بينما لا يحدث ذلك مع ملف DLL باستخدام C,C++ .

اتمنى ان السؤال اصبح واضحا ...

(f)

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

هذا الموضوع مغلق.

مواضيع مشابهة