Чесно кажучи, програма може бути написана на будь-чому, тому що використовується стандартний для всіх програм у Windows механізм динамічних бібліотек — DLL. Але авторові статті найближче середовище програмування Delphi, тому приклад буде саме на ній.


Наша програма буде консольною, без інтерфейсу користувача. Запускаємо середовище програмування та вибираємо у головному меню "File" — "New" — "Other":

 

Создание нового проекта для MyChat Integration API в Delphi XE3

 

І у відкритому вікні обираємо "Console Application":

 

Console Application for MyChat Integration API in Delphi XE3
 

Оскільки для нашої першої програми не потрібен ніякий графічний інтерфейс, консольний додаток підійде найкраще.


Нам знадобиться 32-розрядна DLL бібліотека MyChat Integration API (C:\Program Files (x86)\MyChat Server\doc\IntegrationAPI\MyChatIntegrationAPIDLLs\x32\mychat.dll) завдяки якій ми зможемо підключитися до сервера MyChat і відправити текстове повідомлення.


Простий приклад показує, як відправити приватне тестове повідомлення, що складається з двох рядків, від імені вбудованого робота Elisa.


Текст програми:


// MyChat Integration API sample
// Copyright (c) 2012-2016 by Alexey Pikurov / Network Software Solutions
// https://nsoft-s.com/aboutmychat.html
// [email protected]
//
// Тестувалось на Delphi XE3
// Підтримка, питання, коментарі: https://nsoft-s.com/forum
//
// 22.02.2016
program TestMyChatDLL;
{$APPTYPE CONSOLE}
uses Windows;
const
  MCIAPI_CS_SendPrivateMessage  = 2;
  MCIAPI_CS_IsUINOnline         = 3;
  MCIAPI_CS_SendChannelMessage  = 4;
  MCIAPI_CS_GetUINByNick        = 5;
  MCIAPI_CS_GetUINByEmail       = 6;
  MCIAPI_CS_IsUINExists         = 7;
  MCIAPI_CS_AddBBSMessage       = 8;
  MCIAPI_SC_SetChannelTopic     = 9;
  MCIAPI_CS_GetChannelNameByUID = 10;
  MCIAPI_CS_IsChannelExists     = 11;
  MCIAPI_CS_GetUINByADLogin     = 12;
  MCIAPI_CS_GetInfoByUIN        = 13;
  MCIAPI_CS_GetServerInfo       = 14;
var
  mychatGetLibVersion: function:WideString;safecall;
  mychatGetLibReleaseDate: function:WideString;safecall;
  mychatSendData: function (sIP: WideString; iPort: DWORD; sServerKey: WideString; iCmd: DWORD; sJSONData: WideString): WideString;safecall;
  LibHandle: THandle;
  sData: WideString;
begin
  // чистимо змінні від сміття
  @mychatGetLibVersion     := nil;
  @mychatGetLibReleaseDate := nil;
  @mychatSendData          := nil;
  // намагаємось завантажити бібліотеку
  LibHandle := LoadLibrary('mychat.dll');
  // якщо все ОК
  if LibHandle >= 32 then begin
    // ...то намагаємось отримати адресу функції в бібліотеці
    @mychatGetLibVersion     := GetProcAddress(LibHandle, 'mychatGetLibVersion');
    @mychatGetLibReleaseDate := GetProcAddress(LibHandle, 'mychatGetLibReleaseDate');
    @mychatSendData          := GetProcAddress(LibHandle, 'mychatSendData');
    Writeln(mychatGetLibVersion + ' / ' + mychatGetLibReleaseDate);
    // якщо і тут все ОК
    sData := '{"UserTo":"6","UserFrom":"0","Msg":"Привіт'+ #13#10#13#10 + 'Просто нагадую, що треба додати скріншоти в останню статтю!"}';
      if @mychatSendData <> nil then
        // ...то викликаємо цю функцію і показуємо результат
        writeln(mychatSendData('mychat-server.com', 2004, 'iddqd' , MCIAPI_CS_SendPrivateMessage, sData));
  end;
  // ...і не забуваємо звільнити пам'ять і вивантажити DLL
  FreeLibrary(LibHandle);
end.

 

Отримане повідомлення на клієнті виглядає так:

 

Приклад відправки повідомлення скриптом Delphi в MyChat

 

Дивитися ще

C#

Java

Python

Робота через сокети