Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

внедрение Dll и Open/SaveDialog [D5, Win2k]


Страницы:   1 2 3

lu0 ©   (2006-09-07 10:09:00) 

Проблема с вызовом Open/SaveDialog.
Ситуация такая:
- родительская программа запускает другую в suspended режиме и внедряет в неё dll.
выглядит внедрение так:


function Hoook(DLL:String):Boolean;
var
 Memory,LoadL:Pointer;
 hThread,TID:THANDLE;
 DLLSize,Written:dword;
begin
 Result:=False;
 try
   DLLSize:=Length(DLL)+2;
   Memory:=VirtualAllocEx(PROCESS.hProcess,Nil,DLLSize,MEM_COMMIT or MEM_RESERVE,PAGE_READWRITE);
   If Memory=Nil
   then Exit;
   If not WriteProcessMemory(PROCESS.hProcess,Memory,PChar(DLL),DLLSize,Written)
   then Exit;
   LoadL:=GetProcAddress(GetModuleHandle('Kernel32'),'LoadLibraryA');
   hThread:=CreateRemoteThread(PROCESS.hProcess,Nil,0,LoadL,Memory,0,TID);
   If hThread=0
   then Exit;
   WaitForSingleObject(hThread,INFINITE);
   Result:=True;


код практически один-в-один из примера Рихтера
после чего в вызываемой проге перестают работать диалоги Open/SaveDialog.

может кто скажет чего?


Сергей М.   (2006-09-07 16:14:00) [41]


> как такую ситуацию отлаживать ?


Для начала удивленно чесать репу, обнаружив для себя факт того, что WaitForSingleObject() - это функкция, а не процедура.


Rouse_   (2006-09-07 16:12:00) [42]

> как такую ситуацию отлаживать ?
Не как, а куда :)
Попробуй пока отложить ее в сторону и накидать 3 тестовых приложения. Одно ты уже нарисовал, второе которое будет заниматься внедрением и третье сама простейшая библиотека. Если и там не заработает - кидай исходник на любой файловый архив и давай сюда ссылку.


lu0   (2006-09-07 16:07:00) [43]

вот интересно бы узнать ЧТО?

как такую ситуацию отлаживать ?


Rouse_   (2006-09-07 16:02:00) [44]

Ну внедрил, все работает нормально.
Что-то ты делаешь не так...


lu0   (2006-09-07 15:45:00) [45]


> Джо ©   (07.09.06 13:57) [4]
> medved_68 ©   (07.09.06 13:58) [5]

смотрите мой ответ № 6

> А вообще подозрительно:
> > WaitForSingleObject(hThread,INFINITE);
>
> особенно INFINITE
это щас гляну ... самому подозрительно стало


lu0   (2006-09-07 15:43:00) [46]


> Rouse_ ©   (07.09.06 13:56) [3]
>
>
> > dll не трогайте, там всё пучком ...
>
> А известно ли Вам что каждая исправленная ошибка является
> предпоследней? :)
>
> Попробуй внедрить эту библиотеку:


попробовал :) такаяже фигня.

попробуй внедрять в ЭТОТ код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   SaveDialog1: TSaveDialog;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveDialog1.Execute;
end;

end.


интересует открытие диалога


medved_68   (2006-09-07 13:58:00) [47]

lu0Смотри:
begin
//а здесь мой супер пупер секретный код
end;

блинн код не фурычет....уважаемые помогите найти ошибку!!!!! :))
> может кто скажет чего?

А вообще подозрительно:
> WaitForSingleObject(hThread,INFINITE);

особенно INFINITE


Джо   (2006-09-07 13:57:00) [48]

> [2] lu0 ©   (07.09.06 13:11)
> dll не трогайте, там всё пучком ... даже если в ней всё
> поотключать, то проблема остаётся.

Значит, опять фазы Луны и проклятие Билла Гейтса.


Rouse_   (2006-09-07 13:56:00) [49]


> dll не трогайте, там всё пучком ...

А известно ли Вам что каждая исправленная ошибка является предпоследней? :)

Попробуй внедрить эту библиотеку:

library TestDLL;

uses
 Windows,
 Messages,
 SysUtils;

procedure DLLEntryPoint(dwReason: DWORD);
begin
 case dwReason of
   DLL_PROCESS_ATTACH:
   begin
     MessageBox(0, 'DLL_PROCESS_ATTACH', 'DLL_PROCESS_ATTACH', MB_OK);
     ExitThread(0);
   end;
 end;
end;

begin
 DLLProc := @DLLEntryPoint;
 DLLEntryPoint(DLL_PROCESS_ATTACH);
end.


lu0   (2006-09-07 13:11:00) [50]

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


Сергей М.   (2006-09-07 10:28:00) [51]

Мало ли что творится в твоей DLL, которую ты внедрил в "прогу" ..


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо