Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#12

AW: Record/Struct rückgabe by ref/var

  Alt 23. Mai 2015, 08:31
Zitat:
Bei Delphi ist das ein Rekord. Mit 'var' wird auf den Parameter per übergebener Referenz zugegriffen und Du kannst den Inhalt bearbeiten.
Ja das ist mir schon klar

Zitat:
Bei C# wird die Referenz übergeben, weswegen das imho überhaupt erst funktioniert. Die Referenz an sich wird nicht verändert.
An dieser aussage kann irgend etwas nicht stimmen..
Oder aber ich bin schlichtweg zu blöd dafür.

2 Kriterien die dagegen sprechen.

In meinen beiden Samples C# und VB_NET. Funktioniert es ohne übergabe aus meiner WrapperDLL.
Also.
WrapperDLL.
Code:
//BASSVIS_Free
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("bass_vis.dll", EntryPoint = "BASSVIS_Free", CharSet = CharSet.Auto)]
public static extern void BASSVIS_Free(BASSVIS_PARAM param);
Funktioniert also..
Aber nicht mit MediaPortal.

übergebe ich aus dem Wrapper bei "ref"
Code:
//BASSVIS_Free
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("bass_vis.dll", EntryPoint = "BASSVIS_Free", CharSet = CharSet.Auto)]
public static extern void BASSVIS_Free(ref BASSVIS_PARAM param);
funktionieren meine Samples nicht mehr.
MediaPortal sowieso nicht.
Weil ich Probleme habe dein Beispiel umzusetzen.
Es gibt da mehr als ein Interface in der ich das kapseln muss.

Warum also funktionieren meine Samples ohne Übergabe bei "ref" und mit dann nicht mehr ?
Natürlich habe ich dann die Funktionen in den Samples Angepasst.
Code:
BassVis.BASSVIS_Free(ref mVisParam);
bFree = mVisParam.VisHandle == 0;
bFree ist dann immer False weil das Handle > 0 (mit "ref") ohne ist es 0.

Kann es sein das es nicht ausreicht nur param by ref zurückzugeben?
Müsste ich speziell für den Fall noch selbst für die Rückgabe der Handles aus dem Wrapper sorgen?
Obwohl das eigentlich mir "ref" erledigt sein sollte.

Deshalb mein Einwand!

gruss

Geändert von EWeiss (23. Mai 2015 um 08:42 Uhr)
  Mit Zitat antworten Zitat