Возникли небольшие сложности с использованием DLL. При подключении к проекту dll не могу понять, как передается THandle в dll?(подключена статически)
Это чужой код, видно что подключение идет динамически.
Код:
procedure InitDllClient(ProcessHandle: THandle; CodeListPath: String; CheckVersion: Boolean); external 'dllClient.dll' name 'Init';
procedure DoneDllClient; external 'dllClient.dll' name 'Done';
function hProcess: THandle; external 'dllClient.dll';
procedure SetProccessHandle(Value: THandle); external 'dllClient.dll';
Интересует 3 строка, мне приходиться передавать hProcess вот так
Код:
procedure StartMeditation(ProcessID: NativeUint); stdcall; external 'dllClient.dll';
procedure StopMeditation(ProcessID: NativeUint); stdcall; external 'dllClient.dll';
procedure HidePet(ProcessID: NativeUint); stdcall; external 'dllClient.dll';
Я понимаю, что dll в памяти загружена одна и сколько не запущено окон бота все пользуются одной dll
Сложность в том, что допустим хочу с основного проекта перетащить в dll
Код:
procedure WriteSingle(addr: DWORD; Value: Single);
var
BytesCountOfWrite: NativeUint;
begin
if (addr > 4) and (addr + 4 < $FFFFFFFF) then
try
WriteProcessMemory(hProcess, ptr(addr), @Value, 4, BytesCountOfWrite);
except
end;
end;
hProcess -- мне его с начало передать надо в dll, а потом совершать какие то действия. Вот в этом и состоит вопрос.
Если несколько окон бота открыто, потоки разные, значит их в dll как то завершить нужно?
Все почистил, так как немного разобрался как подключена длл к потокам.
procedure SetProccessHandle(Value: THandle); external 'dllClient.dll'; эта процедура передает открытый поток в длл, для функционирования самой длл.
function hProcess: THandle; external 'dllClient.dll'; эта функция для контроля существования потока в длл, если существует то бот начинает работать в этом потоке.
Начинаем кодить.(теперь даже самому смешно, я хотел инициализацию потоков делать в длл)
|
Цитата: |
|
|
|
|
|
|
|
|
function hProcess: THandle; stdcall;
begin
if ProcessID <> 0 then
hProcess := ProcessID
else
hProcess := 0;
end;
procedure SetProccessHandle(Value: THandle); stdcall;
begin
ProcessID:= 0;
if Value <> 0 then
ProcessID:= Value
else Exit;
end; |
|
|
|
|
|