AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Copy eines record (lokal) kein .NET ...Delphi Win32
Thema durchsuchen
Ansicht
Themen-Optionen

Copy eines record (lokal) kein .NET ...Delphi Win32

Ein Thema von EWeiss · begonnen am 20. Dez 2007 · letzter Beitrag vom 21. Dez 2007
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Copy eines record (lokal) kein .NET ...Delphi Win32

  Alt 20. Dez 2007, 22:24
Habe da ein problem in verbindung mit Net..

Anscheinend kann man innerhalb Net wenn man einen pointer auf einen record übergibt die Daten nicht im Speicher halten.
Ich vertraue darauf, dass alle Parameter quasi als Pointer im Speicher auch noch nach dem Aufruf existieren, damit man darauf zugreifen kann.
Dies ist bei .Net allerdings leider nicht gegeben,
da alle Parameter im Speicher immer nur während der Dauer des Funktions-Aufrufen im Speicher fixiert sind.
Danach kann der Garbage Collector diese ggf. im Speicher verschieben.
Wenn das passiert ich aber 'nur' den Pointer gemerkt habe, kommt es zu einer Exception.

Nun die Frage wie eine lokale Kopie erstellen bevor die Daten übergeben werden ??

gruss Emil
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Copy eines record (lokal)

  Alt 20. Dez 2007, 22:33
Was genau willst du denn mit dem Record anstellen?

PS: Pointer führen das Konzept der Gargabe Collection ad absurdum und sollten daher wo auch nur möglich nicht verwendet werden...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Copy eines record (lokal)

  Alt 20. Dez 2007, 22:43
.Net und Pointer?
Markus Kinzler
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

Re: Copy eines record (lokal)

  Alt 20. Dez 2007, 22:51
Zitat von mkinzler:
.Net und Pointer?
Vielleicht etwas vergessen zur besseren verständigung...

Delphi .. DLL

Delphi-Quellcode:
  PBASSVIS_INFO = ^TBASSVIS_INFO;
  TBASSVIS_INFO = record
    SongTitle : PChar; // Titel mit vorstehener TitelNr ('1. ')
    Songfile : PChar; // SongTitel incl. Pfad
    pos : DWORD; // 1000 * Aktuelle Position im Stream
    len : DWORD; // Stream länge
    PlaylistPos : DWORD; // Playlist Position
    Playlistlen : DWORD; // Playlist einträge
    SampleRate : integer; // SämpleRate
    BitRate : integer; // BitRate
    Duration : DWORD; // abgelaufen Zeit
    Channels : integer; // Kanäle default 2 (stereo)

  end;
VisInfo : TBASSVIS_INFO;

So bei der übergabe von @VisInfo scheint innerhalb des Speichers in NET der Pointer auf den
record VisInfo verschoben zu werden
Deshalb hat man mir geraten davon eine lokale kopie zu erstellen.. nur Wie ?

gruss Emil
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#5

Re: Copy eines record (lokal)

  Alt 20. Dez 2007, 23:34
kannst du bitte in deinen titel .NET angeben...

das ist keine allgemeine pascal frage, sondern M$ implementation...

... und von dieser hab ich keine ahnung. du wirst viel besere antworten bekommen, wenn du das auch richtig betiteln kannst...

grüss und noch 'n schönen abend
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: Copy eines record (lokal)

  Alt 21. Dez 2007, 00:14
Zitat von grenzgaenger:
kannst du bitte in deinen titel .NET angeben...

das ist keine allgemeine pascal frage, sondern M$ implementation...

... und von dieser hab ich keine ahnung. du wirst viel besere antworten bekommen, wenn du das auch richtig betiteln kannst...

grüss und noch 'n schönen abend
Denke mal das du etwas falsch auffaßt hier geht es ausschließlich um Delphi und um nichts anderes.
Also bitte erst lesen und wie ich meinen Thread betiteln muss werd ich schon wissen ... aber danke

Meine DLL ist in Delphi geschrieben also Delphi

Wenn aber jemand diese in NET verwendet und dort der übergebene Pointer verbogen wird muss
ich mir also in Delphi etwas ausdenken um das zu vermeiden oder ?

Schließlich ist die DLL nicht mit NET erstellt sonder mit Delphi 2006

Meine Frage also nochmal !
Muss ich jetzt eine Kopie von meinen Record in Delphi erstellen
und alles was reinkommen darauf verbiegen ?
Oder wie sonst eine lokale Kopie erstellen.

gruss .. auch noch einen schönen Abend.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Copy eines record (lokal) kein .NET ...Delphi Win32

  Alt 21. Dez 2007, 09:04
Im moment fällt mir nur diese lösung ein

Delphi-Quellcode:
Type
  PBASSVIS_INFO = ^TBASSVIS_INFO;
  TBASSVIS_INFO = record
    SongTitle : PChar; // Titel mit vorstehener TitelNr ('1. ')
    Songfile : PChar; // SongTitel incl. Pfad
    pos : DWORD; // 1000 * Aktuelle Position im Stream
    len : DWORD; // Stream länge
    PlaylistPos : DWORD; // Playlist Position
    Playlistlen : DWORD; // Playlist einträge
    SampleRate : integer; // SämpleRate
    BitRate : integer; // BitRate
    Duration : DWORD; // abgelaufen Zeit
    Channels : integer; // Kanäle default 2 (stereo)

  end;

var
  MyInfo : PBASSVIS_INFO;

function BASSVIS_SetInfo(Param: PBASSVIS_PARAM; Infos: PBASSVIS_INFO): BOOL; stdcall;
begin
  // ab jetzt innerhalb der anwendung nur noch mit MyInfo weiterarbeiten
  MyInfo := @Infos;

end;
Theoretisch habe ich nun ein Speicherabbild des Record TBASSVIS_INFO
Damit würde ich die Daten immer noch an der richtigen adresse im speicher halten selbst wenn in .NET
der Zeiger auf den speicherbereich verbogen oder dieser freigegeben wird.

weiß aber nicht ob man das so einfach bewerkstelligen kann.

gruss
  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 22:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz