delphi4arab منتديات دلفي للعرب
كيف تربط برنامجك بملف خارجي؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف تربط برنامجك بملف خارجي؟ (/showthread.php?tid=3211)

الصفحات: 1 2


كيف تربط برنامجك بملف خارجي؟ - cargem - 21-06-2011

مثال جميل ولكنه لا يعمل على DXE
إقتباس :if MapAndLoad(PChar(FileName), nil, @imageinfo, True, True) then

بسبب PChar

وعند تغيره الى PِAnsiChar
لا تعطي اي نتيجة

هناك سؤال!!
عندما تكون هناك الالاف Methods
كيف اجد ضالتي؟


كيف تربط برنامجك بملف خارجي؟ - الزري2 - 21-06-2011

أخي cargem فقط مشغول قليلاً هذه الأيام

متى كنت فارغ سأبحث عن كيفية التحويل للدلفي, ولكن لا تتوقع مني الكثير لأنني لا زلت صاحب أسبوعين في الدلفي
Smile


كيف تربط برنامجك بملف خارجي؟ - TF6M - 21-06-2011

'عندما تكون هناك الالاف Methods'
- أنت ما هدفك ؟ كل الدوال أم دالة أم بلوك أم ......
- ماذا تريد بالظبط أخي ؟


كيف تربط برنامجك بملف خارجي؟ - cargem - 21-06-2011

لقد وجدت اسم الروتين
إقتباس :?Calculation@Fproj@@mngty@k
والان كيف ننفذ دالة تحتوي على رموز مثل ؟ و@
لقد حاولت تغير اسم الدالة في قائمة export
عن طريق hex workshop
ولكن بدون فائدة
ما الحل؟

كيف تنفيذ دالة عن طريق indix الدالة؟


كيف تربط برنامجك بملف خارجي؟ - cargem - 21-06-2011

index of procedure=2345
كود :
procedure TForm1.Button1Click(Sender: TObject); Var dll_Handle: THandle; ?Calculation@Fproj@@mngty@k: procedure(w, n, u: Char); Begin dll_Handle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'nameofdll.Dll')); If dll_Handle <> 0 Then @?Calculation@Fproj@@mngty@k := GetProcAddress(dll_Handle, '?Calculation@Fproj@@mngty@k'); If @?Calculation@Fproj@@mngty@k <> Nil Then ?Calculation@Fproj@@mngty@k('A', 'B', 'H'); // Else .... . FreeLibrary(dll_Handle); // Else ....; End;



كيف تربط برنامجك بملف خارجي؟ - Lam.Abdeldjalil - 21-06-2011

السلام عليكم

بالنسبة لـ
إقتباس :مثال جميل ولكنه لا يعمل على dxe
اقتباس:
If mapandload(pchar(filename), nil, @imageinfo, true, true) then
بسبب pchar
جرب
إقتباس : if mapandload(pansichar(filename), nil, @imageinfo, true, true) then
بالتوفيق


كيف تربط برنامجك بملف خارجي؟ - cargem - 22-06-2011

الحل هو كما علمتنا استاذ
كود :
if mapandload(pansichar(ansistring(filename)), nil, @imageinfo, true, true) then
ثم
كود :
name := pansichar(imagervatova(imageinfo.fileheader, imageinfo.mappedaddress, pnamervas^[i], pdummy)); list.add(name);
انت تريد ان تختبرني هههه


كيف تربط برنامجك بملف خارجي؟ - cargem - 22-06-2011

كيف نستخرج عنوان Method
وننفذه
كود :
procedure ListDLLExports(const FileName: string; List: TStrings); type TDWordArray = array [0 .. $FFFFF] of DWORD; var imageinfo: LoadedImage; pExportDirectory: PImageExportDirectory; dirsize: Cardinal; pDummy: PImageSectionHeader; i: Cardinal; pNameRVAs: ^TDWordArray; Name, AddressOfFunctions: string; begin List.Clear; (* function MapAndLoad(ImageName, DllPath: LPSTR; LoadedImage: PLoadedImage; DotDll, ReadOnly: Bool): Bool; stdcall; *) if MapAndLoad(PAnsiChar(AnsiString(FileName)), nil, @imageinfo, True, True) then begin try // Form1.Label2.Caption :='Address Of Dll = ' + AnsiString(@imageinfo) ; pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress, False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize); if (pExportDirectory <> nil) then begin pNameRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress, DWORD(pExportDirectory^.AddressOfNames), pDummy); for i := 0 to pExportDirectory^.NumberOfNames - 1 do begin Name := PAnsiChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress, pNameRVAs^[i], pDummy)); // AddressOfFunctions := PAnsiChar(pExportDirectory^.AddressOfFunctions) ; List.Add(Name); end; end; finally UnMapAndLoad(@imageinfo); end; end; end;



كيف تربط برنامجك بملف خارجي؟ - cargem - 28-06-2011

لقد حليت المشكلة
تحياتي للجميع