Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Использование DLL в своих проектах

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 24.12.2015, 01:04   #1
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Использование DLL в своих проектах

Возникли небольшие сложности с использованием 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;


Последний раз редактировалось diagnost; 25.12.2015 в 03:13.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] 2 окна в проектах Mail.ru? Zephy Прочее 0 23.10.2012 05:46
[Куплю] Дюпы на крупных проектах. MarcJacobs Lineage 2 1 18.08.2012 12:49

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 05:25.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net