myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » marshal va_list
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

marshal va_list

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
TomTom85
myCSharp.de-Mitglied

Dabei seit: 16.10.2007
Beiträge: 23


TomTom85 ist offline

marshal va_list

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen!

Ich hab mal wieder ein Problemchen beim Marshaln.
Ich hab eine Funktion, die ein va_list erwartet.
Das ganze sieht so aus:

C#-Code:
int __stdcall DDC_CreateFilePropertyV (DDCFileHandle file,
                                       const char *property,
               DDCDataType dataType,
                                       va_list args);

Mein bisheriger Ansatz war, hier ein "Object" zu übergeben und als
als UnmanagedType.Any zu marsheln, aber das scheint wohl nicht zu funktionieren.
Hab dazu nicht wirklich etwas bei gogle gefunden.

Vielleicht kann mir ja von euch jemand helfen.

Vielen dank schonmal im voraus

mfg Tom
Neuer Beitrag 24.10.2007 16:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dr4g0n76
myCSharp.de-Poweruser/ Experte

avatar-1768.jpg


Dabei seit: 07.07.2005
Beiträge: 2.890
Entwicklungsumgebung: SharpDevelop/VS.NET
Herkunft: Deutschland


dr4g0n76 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

1. guck mal bei PInvoke.net
2. falls dort nix gefunden, guck mal nach DDCFileHandle ob du das in einem Include-File (C++-Header Datei) findest, und versuch die Klasse oder die Struct nach C# umzusetzen. Das sollte funktionieren.
3. Gibt's in anderen Foren schon was dazu vielleicht mit VB?
Neuer Beitrag 24.10.2007 16:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
TomTom85
myCSharp.de-Mitglied

Dabei seit: 16.10.2007
Beiträge: 23

Themenstarter Thema begonnen von TomTom85

TomTom85 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
2. falls dort nix gefunden, guck mal nach DDCFileHandle ob du das in einem Include-File (C++-Header Datei) findest, und versuch die Klasse oder die Struct nach C# umzusetzen. Das sollte funktionieren.

Wie der Rest der Funktion gemarshalt wird ist mir klar. Es geht nur um das blöde va_list.
Wie ich ein vararg marshaln kann habe ich beim msdn schon gefunden, aber zum Thema va_list find ich einfach nix. Das ist ja auch schon ein sehr sehr altest Konstrukt.

mfg Tom
Neuer Beitrag 24.10.2007 17:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dr4g0n76
myCSharp.de-Poweruser/ Experte

avatar-1768.jpg


Dabei seit: 07.07.2005
Beiträge: 2.890
Entwicklungsumgebung: SharpDevelop/VS.NET
Herkunft: Deutschland


dr4g0n76 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ok sorry. Dann Probier mal ob

C#-Code:
params object [] aListElements

funktioniert.
Neuer Beitrag 24.10.2007 17:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
TomTom85
myCSharp.de-Mitglied

Dabei seit: 16.10.2007
Beiträge: 23

Themenstarter Thema begonnen von TomTom85

TomTom85 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hab ich auch schon probiert.

Der sagt immer attempted to read or write protected memory.

mft Tom
Neuer Beitrag 24.10.2007 17:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dr4g0n76
myCSharp.de-Poweruser/ Experte

avatar-1768.jpg


Dabei seit: 07.07.2005
Beiträge: 2.890
Entwicklungsumgebung: SharpDevelop/VS.NET
Herkunft: Deutschland


dr4g0n76 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

und dasselbe mit ref oder out schlüsselwort vorangestellt?
Neuer Beitrag 24.10.2007 17:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
TomTom85
myCSharp.de-Mitglied

Dabei seit: 16.10.2007
Beiträge: 23

Themenstarter Thema begonnen von TomTom85

TomTom85 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ref und out darf nicht in Verbindung mit ref oder out verwendet werden

mfg Tom
Neuer Beitrag 24.10.2007 17:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dr4g0n76
myCSharp.de-Poweruser/ Experte

avatar-1768.jpg


Dabei seit: 07.07.2005
Beiträge: 2.890
Entwicklungsumgebung: SharpDevelop/VS.NET
Herkunft: Deutschland


dr4g0n76 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
ref und out darf nicht in Verbindung mit ref oder out verwendet werden

das schliesst sich aus?!

meintest du vielleicht params?
Neuer Beitrag 24.10.2007 17:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
TomTom85
myCSharp.de-Mitglied

Dabei seit: 16.10.2007
Beiträge: 23

Themenstarter Thema begonnen von TomTom85

TomTom85 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

äh ja natürlich :-)
Neuer Beitrag 24.10.2007 17:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dieser va_List-Müll ist compiler-spezifisch. Man müßte erstmal rausfinden, was der aus dem Makro macht. Im besten Fall ist das ein Zeiger auf ein Array. Musst du dann per IntPtr übergeben.

Ich würde aber eher davon ausgehen, dass sowas gar nicht geht. va_list ist halt grundsätzlich inkompatibel mit dem Rest der Welt.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von svenson am 24.10.2007 23:43.

Neuer Beitrag 24.10.2007 23:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
TomTom85
myCSharp.de-Mitglied

Dabei seit: 16.10.2007
Beiträge: 23

Themenstarter Thema begonnen von TomTom85

TomTom85 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank für den Tip.
Es funktioniert wenn ich es als array aus IntPtr übergebe.

C#-Code:
IntPtr[] ptr = new IntPtr[1];
                    byte[] arr = new byte[] { (byte)'H', (byte)'a', (byte)'l', (byte)'l',   (byte)'o', (byte)'\0' };
                    ptr[0] = Marshal.AllocHGlobal(sizeof(byte) * arr.Length);
                    Marshal.Copy(arr, 0, ptr[0], arr.Length);
Result = VSDDCTDM.DDC_SetFilePropertyV(file, Prop.Name, ptr);

Das DllImport sieht so aus:

C#-Code:
[DllImport("nilibddc.dll", CharSet = CharSet.Ansi)]
        public static extern int DDC_SetFilePropertyV(
            IntPtr file,
            string property,
            IntPtr[] value
            );

Wie sich das ganze verhält, wenn man mehrere Argumente übergibt weiß ich nicht, weil meine Funktion hier immer nur ein Argument erwartet.
Aber für ein Argument funtkioniert das zumindest.

mfg Tom
Neuer Beitrag 25.10.2007 08:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 12 Jahre.
Der letzte Beitrag ist älter als 12 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 09.07.2020 10:42