Marshalling Array of Single
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.
-
-
-
Sieh Dir mal dieses Tut an.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Der Aufruf sieht hierbei wie folgt aus:
measure(0) = Pointer auf Array a
measure(1) = Pointer auf Messung 1
measure(2) = Pointer auf Messung 2
............
measure(n) = Pointer auf Messung n
blublablo(ipar,dpar,measure)
Wenn ich versuche in die Funktion ein Array mit Werten zu geben kommt:
""parameter 3" kann nicht gemarshallt werden: Für geschachtelte Arrays ist keine Marshallunterstützung vorhanden." -
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Ich habe mich leider undeutlich ausgedrückt. Wie ich das Array an sich erstelle ist mir klar. Aber wie komme ich an die IntPtr beispielsweise eines Arrays (oder eines Elements eines Arrays) heran.
Bsp:
Ich habe ein Array(...Daten, Daten, Daten,...) und möchte hiervon den IntPtr -
chrissfuwa schrieb:
Ich habe ein Array(...Daten, Daten, Daten,...) und möchte hiervon den IntPtr
Ganz einfach: Du übergibst das Array, .NET marshaled daraus eh den Pointer. -
Kangaroo schrieb:
chrissfuwa schrieb:
Ich habe ein Array(...Daten, Daten, Daten,...) und möchte hiervon den IntPtr
Ganz einfach: Du übergibst das Array, .NET marshaled daraus eh den Pointer.
""parameter 3" kann nicht gemarshallt werden: Für geschachtelte Arrays ist keine Marshallunterstützung vorhanden."
Die DLL erwartet ein Array()() As Single
Deren INhalt Pointer auf Arrays sind -
chrissfuwa schrieb:
und möchte hiervon den IntPtrRodFromGermany schrieb:
Sieh Dir mal dieses Tut an.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
@chrissfuwa: Bitte unterlasse das vollständige Zitieren von Postings direkt über deinem. Zudem macht es keinen Sinn, sogar dein eigenes Posting nochmal zu zitieren.
-
Inzwischen habe ich folgendes gemacht:
VB.NET-Quellcode
- 'Pointer auf Array
- Dim triggData As GCHandle = GCHandle.Alloc(triggDataArr, GCHandleType.Pinned)
- Dim triggDataPtr As System.Intptr = triggData.AddrOfPinnedObject
- 'Array of Ptr, auf das ein Ptr zeigt
- Dim fparMeasData(0 To measData.length)() As Single
- Dim measDataGCH As GCHandle
- Dim measDataPtrArr(0 To measData.Length -1) As System.Intptr
- for cnt As Integer = 0 To measData.length -1
- lockMeasData = GCHandle.Alloc(fparMeasData(cnt), GCHandleType.Pinned)
- fparMeasData(cnt) = lockMeasData.AddrOfPinnedObject
- Next
- 'Pointer auf das Array of Pointer
- Dim fparMeasDataArr As GCHandle = GCHandle.Alloc(fparMeasData, GCHandleType.Pinned)
- Dim fparMeasDataArrPtr As System.Intptr = fparMeasDataArr.AddrOfPinnedObject
Ist die Vorgehensweise so korrekt? Gibt es bessere Wege ?
Es kommt die Meldung, dass der Einstiegspunkt der Methode nicht in der
DLL gefunden werden konnte. Dies heißt wiederum, dass die
Übergabeparamerter so nicht stimmen....Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „chrissfuwa“ ()
-
@chrissfuwa: Lernresistent?
RodFromGermany schrieb:
Sieh Dir mal dieses Tut an.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
Noch mal zur Auffrischung:
Was willst Du in .NET übergeben,
was erwartet die DLL?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Die DLL Funktion sieht wie folgt aus:
blablublo(int *ipar, double *dpar, double *fptr[1...n Elemente, welche Arrays Of Double sind])
ipar ist ein array, dpar ist ein array und fptr ist ein mehrdimensionales array
Mit:
erhalte ich einen Pointer auf das ipar Array (dasselbe in grün mit dem dpar Array).
Aber bei dem Mehrdimensionalen Array kracht es...Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „chrissfuwa“ ()
-
Hast Du die C-Quellen in Deiner Hand?
-----
Ohne das jetzt hier getestet zu haben.
Mach Dir ein Array of IntPtr
und weise jedem Array-Element den gemarshalten IntPtr auf die jeweilige Zeile zu.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Hast Du die C-Quellen in Deiner Hand?
-----
Ohne das jetzt hier getestet zu haben.
Mach Dir ein Array of IntPtr
und weise jedem Array-Element den gemarshalten IntPtr auf die jeweilige Zeile zu.
Wie ist das in .net funktionieren IntPtr auch mit Double oder sonstigen Werten (es gibt soweit ich gesehen habe keine DblPtr) .
Du meinst also "Array of IntPtr" erstellen und dort für jedes Element einen Pointer holen und letztendlich den pointer auf das array übergeben?Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „chrissfuwa“ ()
-
IntPtr
ist einfach ein Ding, das man nach C / C++ mitvoid*
übersetzen kann. Mach also einfach einen Pointer auf ein Array auf Pointer und los.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
Mach mal bitte ein kleines Testprojekt, das will ich mir mal ansehen.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
-
Ähnliche Themen
-
Fehler bei Konvertierung von String in Single
MarcoQuinten - - Sonstige Problemstellungen
-
4 Benutzer haben hier geschrieben
- Gast (11)
- RodFromGermany (10)
- Marcus Gräfe (1)
- ~blaze~ (1)