var user32 : HMODULE; Box: TMBox; Name,str:TUnicodeString; p:pointer; .... RtlInitUnicodeString(@Name, 'user32.dll'); LdrLoadDll(nil, 0, @Name, @User32); {хэндл не нулевой . я проверяла} RtlFreeUnicodeString(@Name); RtlInitUnicodeString(@str, 'MessageBoxA'); LdrGetProcedureAddress(user32,0,@str,p); RtlFreeUnicodeString(@str); @box:=p; box(0,'qe','qwe',0);
вот тут сразу вылазит ошибка....будто процедура ссылается на пустое пространство...хотя полученный указатель P не пустой иGetLasError после LdrGetProcedureAddress показывакт 0... пожскажите где ошибка?
ну а как это можно решить? или только стандартным GetProcAdress??
Костя Кузнецов
Мудрец
(17142)
Ну вообще то я код этот не особо понимаю, да и время позднее уже) Если вызовется MessageBoxW то можно будет сказать что направление поиска ошибки верное.
var
user32 : HMODULE;
Box: TMBox;
Name,str:TUnicodeString;
p:pointer;
....
RtlInitUnicodeString(@Name, 'user32.dll');
LdrLoadDll(nil, 0, @Name, @User32);
{хэндл не нулевой . я проверяла}
RtlFreeUnicodeString(@Name);
RtlInitUnicodeString(@str, 'MessageBoxA');
LdrGetProcedureAddress(user32,0,@str,p);
RtlFreeUnicodeString(@str);
@box:=p;
box(0,'qe','qwe',0);
вот тут сразу вылазит ошибка....будто процедура ссылается на пустое пространство...хотя полученный указатель P не пустой иGetLasError после LdrGetProcedureAddress показывакт 0...
пожскажите где ошибка?