Moin,
ich versuche gerade ein Plugin für Winamp5 zu schreiben, dass es ermöglicht Winamp über das netzwerk "fernzusteuern". Ich weiß, dass es derartige Plug-ins schon gibt, trotzdem möchte ich -der Erfahrung halber- mein eigenes Plug-in schreiben. Mein erster Gedanke war die
Indy-kompos zu verwenden...
Kleiner test mit zwei ganz normalen anwendung: Das senden von Strings zwischen zwei PCs klappte auf anhieb tadellos. Nun habe ich versucht den "Server" in eine
DLL zu verfrachten, doch leider bekomme ich die Fehlermeldung
Zitat:
[Fehler] gen_remamp.dpr(86): Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
in der zeile
IdTCPServer1.OnExecute:= IdTCPServer1Execute;
zum besseren verständniss poste ichmal den gesamten source der libary:
Delphi-Quellcode:
library gen_remamp;
{$R *.res}
uses
Windows, SysUtils, Forms, IdBaseComponent, IdComponent, IdTCPServer;
type
PGeneralPlugin = ^TGeneralPlugin;
TGeneralPlugin =
record
Version: Integer;
Description: PChar;
InitProc:
procedure;
cdecl;
ConfigProc:
procedure;
cdecl;
QuitProc:
procedure;
cdecl;
hwndParent: THandle;
DllInstance: THandle;
end;
var
PluginInfo: TGeneralPlugin;
HookHandle: Cardinal = 0;
hWinAmp: HWnd;
IdTCPServer1: TIdTCPServer;
const
WM_USER = $0400;
WM_WA_IPC = $0400;
WM_COMMAND = $0111;
IPC_PLAYFILE = 100;
IPC_STARTPLAY = 102;
IPC_SETPLAYLISTPOS = 121;
IPC_GetListPos = 125;
IPC_GetPlaylistFile = 211;
IPC_UPDTITLE = 243;
IPC_PlayButton = 40045;
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
begin
MessageBox(0, '
', PChar(AThread.Connection.ReadLn), MB_OK);
end;
procedure InitPlugin;
cdecl
var
position: Integer;
begin
{//Start
position:= 1;
SendMessage(hWinAmp,WM_WA_IPC,position,IPC_SETPLAYLISTPOS);
SendMessage(hWinAmp,WM_WA_IPC,0,IPC_PLAYFILE);
//SendMessage(hWinAmp,WM_WA_IPC,0,IPC_UPDTITLE);
//SendMessage(hWinAmp,WM_WA_IPC,0,IPC_STARTPLAY);}
// Test des Indy-Clients
end;
procedure ConfigPlugin;
cdecl
begin
MessageBox(0, '
RemoteAmp - Control WinAmp via TCP/IP' + #13 +
#13 +
'
coded by GimbaR' + #13 +
'
RemAmp - 09/05', mb_ok);
end;
procedure QuitPlugin;
cdecl;
begin
//Disconcect
end;
function GetPluginInfo: PGeneralPlugin;
begin
with PluginInfo
do
begin
Version:= $10;
Description:='
RemAmp - remote WinAmp [TCP/IP] - by GimbaR';
InitProc:= InitPlugin;
ConfigProc:= ConfigPlugin;
QuitProc:= QuitPlugin;
hwndParent:= 0;
DllInstance:= hInstance;
end;
result:= @PluginInfo;
hWinAmp:= FindWindow('
Winamp v1.x',
nil);
// Einstellungen des Indy-Servers setzen
IdTCPServer1:= TIdTCPServer.Create(Application);
IdTCPServer1.DefaultPort:= 35600;
IdTCPServer1.OnExecute:= IdTCPServer1Execute;
//<-- hier tritt der Fehler auf
end;
exports
GetPluginInfo
name '
winampGetGeneralPurposePlugin';
end.
Eigentlich dachte ich dass ich die Procedure "IdTCPServer1Execute" direkt auf das Ereigniss "OnExecute" von "IdTCPServer1" könnte, aber leider kommt halt die fehlermeldung
Weiß jemand rat? Was muss ich beachten? Was soll ich ändern? Ist das überhaupt möglich?
^^
so far
GimbaR