Строго говоря, программа может быть написана на чём угодно, потому что используется стандартный для всех программ в Windows механизм динамических библиотек — DLL. Но автору статьи ближе всего среда программирования Delphi, поэтому пример будет именно на ней.
Наше приложение будет консольным, без интерфейса пользователя. Запускаем среду программирования и выбираем в главном меню "File" — "New" — "Other":
И из открывшегося окна выбираем "Console Application":
Поскольку для нашей первой программы не нужен никакой графический интерфейс, консольное приложение подойдёт лучше всего.
Нам понадобится 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
// support@nsoft-s.com
//
// Тестировалось на 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.
Полученное сообщение на клиенте выглядит вот так: