1
Разработка / Development / Re: C++ Builder DLL
« on: January 01, 2010, 21:55:37 »
Давно тут не появлялся, разработка временно заморожена по причине недостатка свободного времени.
Поделюсь минимальным рабочим кодом для C++ Builder 6:
То самое, что в Unit1.cpp, чтобы работало
При компилянии не забудьте про Project/Options/Advanced Compiler/Calling convention [Standard call]
И про создание DLL в Билдере обязательно почитать!
Поделюсь минимальным рабочим кодом для C++ Builder 6:
То самое, что в Unit1.cpp, чтобы работало
Code: [Select]
#include <vcl.h>
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#pragma hdrstop
#include "aimp2_sdk.h"
#include "unit1.h"
#define PLUGIN_VERSION 1
int s;
WSADATA lpWSAData;
IAIMP2Controller *aimp;
PCHAR WINAPI __stdcall GetPlgName() {
return "My Plugin";
}
PCHAR WINAPI __stdcall GetAuthor() {
return "zoonman";
}
// функция, которая вызывается, когда начинает проигрываться трек
void WINAPI __stdcall TrackPlay(DWORD User, DWORD dwCBType) {
AIMP2FileInfo aif;
WCHAR sArt[256]={L""};
WCHAR sTit[256]={L""};
bool r;
// чистим память
ZeroMemory(&aif, sizeof(aif));
aif.cbSizeOf = sizeof(aif);
aif.sArtist = sArt;
aif.nArtistLen=256;
aif.sTitle = sTit;
aif.nTitleLen = 256;
r = aimp->AIMP_GetCurrentTrack(&aif);
if (r) {
// ShowMessage(WideCharToString(aif.sArtist) + '=' + WideCharToString(aif.sTitle));
}
AnsiString st,str,rstr;
str = WideCharToString(aif.sTitle);
// теперь в str строчка с заголовком трека
}
// ---
void WINAPI Init(IAIMP2Controller *AController) {
// связываем функцию-обработчик TrackPlay() с событием AIMP_PLAY_FILE
AController->AIMP_CallBack_Set(AIMP_PLAY_FILE,TrackPlay, 1);
aimp = AController;
}
void WINAPI Config(DWORD Handle, DWORD Win) {
// тут надо бы поместить код для настройки св-в модуля
}
void WINAPI Free() {
// а тут по-хорошему грохнуть структуру aimp
};
/*
Инициализация структуры плагина
*/
AIMPAddonHeader plugin = {
PLUGIN_VERSION,
0,
GetPlgName,
GetAuthor,
Init,
Config,
Free
};
extern "C" __declspec( dllexport ) AIMPAddonHeader* AIMP_QueryAddon()
{
return &plugin;
}
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
При компилянии не забудьте про Project/Options/Advanced Compiler/Calling convention [Standard call]
И про создание DLL в Билдере обязательно почитать!