Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Daten von C# an Delphi senden

  Alt 3. Jul 2014, 03:12
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

Geändert von EWeiss ( 3. Jul 2014 um 03:39 Uhr)
  Mit Zitat antworten Zitat