INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Einbinden einer DLL, Speichermanagement



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

13.10.2009, 18:09
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Einbinden einer DLL, Speichermanagement
' schrieb:
Code:
unsigned int GetData(double **X, double **Y);
Aus deinem Posting entnehme ich, dass X und Y zwei Arrays sind. Stimmt das so?

Zitat:Array-Format: Array-Handle
Hm. Hm.
Double** ist zuerst mal ein Poiner auf einen Pointer, der auf ein Double zeigt - also nicht zwangsläufig ein Array-Handle. Ich glaube der Array-Handle beginnt mit der Arraygröße, nicht mit den Array-Daten (respektive einem Pointer auf die Arraydaten).

Zitat:Das Problem ist, dass LabVIEW nach dem Aufruf entweder den Dialog "Nicht genügend Speicher zum Abschließen dieser Operation" anzeigt,
Das entspricht aber einem Absturz.

Zitat:oder direkt nach der Ausführung abstürzt. (Unabhängig davon, ob ich die Funktion zum Freigeben des Speichers aufrufe oder nicht.)
Müsste mir klar sein, da ein double** kein Array-Handle ist, und somit DATA (also double** Data) im Norivana liegt.

Zitat:Ich denke mal, da kommen sich die DLL und der Speichermanager in die Quere, oder?
Nein, nicht unbedingt. Ich bin der Meinung, es liegt vielmehr eine ganz ordinärere AccessViolation vor. Da GetData Daten kopieren will (denk ich mal) vom DLL-Speicher in den LV-Speicher, sollte das mit den möglicherweise verschiedenen Speichermanagern funktionieren.

Zitat:Tja jedenfalls weiß ich nicht genau wie ich die Funktion behandeln soll, sodass keine Speicherkonflikte entstehen.
Probiers mal mit Zeiger auf Array-Handle.

Zitat:Und noch etwas: Die DLL wurde schon in mehreren C-Projekten genutzt, wo sie einwandfrei funktioniert.
Naja, da kann man ja die Aufrufparemeter solange anpassen, bis die double** entsprechen. Das geht eben in LV nicht. LV kennt keine Pointer auf Anwenderebene.

Wenn es unbedingt ein double** sein muss, würde das zwar mit Aufwand aber auch in LV gehen. Und zwar indirekt über einen MemMove. Ich glaube mich zu erinnern, dass es hier im Forum einen Thraed gibt, der darstellt, wie man einen Pointer in einem U32 abspeichert. Das zweimal ergibt dann einen Double**.

Ich hab gerade keine Zeit. Versuch mal selbst hier im Forum zu suchen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
Einbinden einer DLL, Speichermanagement - IchSelbst - 13.10.2009 18:09

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Einbinden einer DLL mit mehr Output-Parametern, als Input-Parametern Herm 3 6.255 14.06.2011 11:12
Letzter Beitrag: rolfk
  DLL in LV einbinden. Geht es nur mit einer anderen Wrapper-DLL Dimitri 24 27.166 02.07.2010 15:16
Letzter Beitrag: Dimitri
  Einbinden einer dll (*.so) Apu 3 6.333 08.03.2010 19:51
Letzter Beitrag: rolfk
  Problem beim Einbinden einer DLL preacha 18 19.225 25.09.2008 11:51
Letzter Beitrag: baliik
  Einbinden einer Delphi-dll Svenni 6 8.377 17.10.2006 12:05
Letzter Beitrag: Svenni

Gehe zu: