Вопрос по Win API
TMBox = function (hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
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...
пожскажите где ошибка?
Не в том ли ошибка что выз-ся юникод функции (RtlFreeUnicodeString, RtlInitUnicodeString, RtlFreeUnicodeString) для использования MessageBoxA ?
Я бы объявил так:
TMBox = function (hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
PMBox = ^TMBox
var
Box : PMBox
А последние 2 строчки переписал бы так:
Box = PMBox(p);
box(0,'qe','qwe',0);