AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten von C# an Delphi senden

Offene Frage von "himitsu"
Ein Thema von API · begonnen am 30. Jun 2014 · letzter Beitrag vom 3. Jul 2014
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.877 Beiträge
 
Delphi 12 Athens
 
#2

AW: Daten von C# an Delphi senden

  Alt 3. Jul 2014, 10:26
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#)
Wobei du den String direkt als Daten-Zeiger für das WM_COPYDATA verwendest, was natürlich funktioniert, aber nicht als "weiteren" Zeiger innerhalb des Daten-Records.

Es wird nur der Daten-Record übertragen, aber ob da Zeiger drin sind, ist dem Ding total egal und es ignoriert Diese.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Jul 2014 um 10:32 Uhr)
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Daten von C# an Delphi senden

  Alt 3. Jul 2014, 11:08
Wie wäre es, für den String einfach einen COM-BSTR zu verwenden ? Mit den Dingern kommen sowohl C# als auch Delphi problemlos klar.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.877 Beiträge
 
Delphi 12 Athens
 
#4

AW: Daten von C# an Delphi senden

  Alt 3. Jul 2014, 13:17
COM-BSTR = SysAllocString und Co.?

Joar, in Delphi ist das ganz einfach der WideString,
aber nicht prozessübergreifend (außer da wo z.B. ein COM-Server die Daten umkopiert)
oder als Feld in einem Record, welcher dann via WM_COPYDATA übergeben wird,
da hilft das nichts.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz