![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
внедрение Dll и Open/SaveDialog [D5, Win2k]
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, которую ты внедрил в "прогу" ..