Hmm.. weis jetzt nicht wo das Problem liegt.. und ja ich sende strings
Ich hab da kein Problem allerdings in umgekehrter Reihenfolge. (Delphi nach C#)
Delphi-Quellcode:
// added song to Playlist
for i := 0 to fAlbumList.Count - 1 do
WAAddFile(Module^.hWNDParent, AnsiString(fFilePath + fAlbumList.Strings[i]));
Delphi-Quellcode:
function int_cds(mainwawnd: HWND; text: AnsiString; msg: Integer): Integer;
var
cds: COPYDATASTRUCT;
begin
cds.dwData := msg;
cds.lpData := PAnsiChar(text);
cds.cbData := (lstrlen(cds.lpData)+1) * SizeOf(Char); {include space for null char}
result := SendMessage(mainwawnd, WM_COPYDATA, 0, LPARAM(@cds));
end;
function WAAddFile(mainwawnd: HWND; FilePath: AnsiString): Integer;
begin
result := int_cds(mainwawnd, FilePath, IPC_PLAYFILE);
end;
Ausgewertet in C#
Code:
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
Code:
case BASSVIS_PLAYSTATE.AddPlaylistTitle:
COPYDATASTRUCT cds = new COPYDATASTRUCT();
cds = (COPYDATASTRUCT)Marshal.PtrToStructure((IntPtr)BassVis.BASSVIS_SetPlayState(mVisParam, BASSVIS_PLAYSTATE.AddPlaylistTitle), typeof(COPYDATASTRUCT));
Title = cds.lpData;
lstPathList.Items.Add(Title);
Playlist.Items.Add(Path.GetFileNameWithoutExtension(Title));
break;
Es wird also die Playliste gelöscht und mit
SendMessage(mainwawnd, WM_COPYDATA, 0, LPARAM(@cds));
in der C# Anwendung neu gefüllt.
Das ganze geht dann über zwei Delphi-
DLL's in die Anwendung. (GLPlugin, PluginWrapper, C# Anwendung)
Vielleicht hilft es dir ja.
Nebenbei: Ist die Struct in C# überhaupt ein Packed Record? (Dadurch addierst du ein Byte zum Record)
Denke mal nicht.
gruss