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 

DLL einbinden für Intel-Atom N270 an SuperI/O-Chip



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.2011, 10:55
Beitrag #11

ralph.d Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jul 2011

8.20 PDS
2000
DE



RE: DLL einbinden für Intel-Atom N270 an SuperI/O-Chip
Hallo !

Sorry - nicht von Ihnen, sondern vom Original Autor (siehe oben).

Open gibt ein gültiges Handle zurück und wie gesagt open, getitemnodes und getidemnodes geht, gibt ein handle zurück, kein fehler und daten. nur die getdata nicht... (liefert eine 0 zurück (fehler) und die daten werden direkt aus dem erstellten array durchgeschoben)

alle bemühungen, die dll vom windows verzeichnis oder direkt von c: zu starten haben nichts gebracht...


Angehängte Datei(en)
8.2 .vi  iSmm_HWM_lesen(3).vi (Größe: 52 KB / Downloads: 207)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
14.10.2011, 11:09 (Dieser Beitrag wurde zuletzt bearbeitet: 14.10.2011 11:10 von rolfk.)
Beitrag #12

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL einbinden für Intel-Atom N270 an SuperI/O-Chip
(13.10.2011 10:55 )ralph.d schrieb:  Hallo !

Sorry - nicht von Ihnen, sondern vom Original Autor (siehe oben).

Open gibt ein gültiges Handle zurück und wie gesagt open, getitemnodes und getidemnodes geht, gibt ein handle zurück, kein fehler und daten. nur die getdata nicht... (liefert eine 0 zurück (fehler) und die daten werden direkt aus dem erstellten array durchgeschoben)

alle bemühungen, die dll vom windows verzeichnis oder direkt von c: zu starten haben nichts gebracht...

Also GetItemDesc kann so wie es programmiert ist sowieso nichts sinnvolles tun. Da muss man dem vierten Parameter ein Array of Bytes spendieren das man anlegen muss und im dritten Parameter mitteilen wie gross dieses ist. So wie es jetzt ist wird diesen Parametern gar nichts mitgegeben. D.h. die Parameter werden "wahrscheinlich" durch LabVIEW auf die Default Werte gesetzt, was 0 für den dritten Parameter und ein NULL Array für den vierten Parameter bedeutet. Das ist aber unsauber und vertraut darauf dass LabVIEW schon alles sauber initilialisiert. Und selbst wenn LabVIEW das sauber macht UND die DLL-Funktion sich tatsächlich strikt daran hält was in der Dokumentation steht, macht der Funktionsaufruf absolut keinen Sinn. Denn was er eigentlich tut ist nichts anderes als die DLL bitten Informationen zurückzugeben, ihr aber jegliche Möglichkeit zu nehmen das dann auch wirklich zu tun.

Und zum Pfad: Kopiere die DLL ins selbe Verzeichnis als Deine VIs in denen Du sie aufrufst, Disable die Funktion um den Pfad im Diagram anzugeben, ändere den Pfad im Konfigurationsdialog um nur noch den DLL Namen zu enthalten und Du hast Dir wieder ein Problem erspart wenn Du später alles in ein Executable bauen willst. Diese Vorgehensweise ist nicht bei allen DLLs anzubefehlen, sondern nur bei DLLs die ohne weitere Abhängigkeiten ausser Windows APIs selbständig laufen.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.10.2011, 12:08
Beitrag #13

ralph.d Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jul 2011

8.20 PDS
2000
DE



RE: DLL einbinden für Intel-Atom N270 an SuperI/O-Chip
Hab's nochmal probiert mit Verweis auf die DLL im Knoten selbst. Leider kein Erfolg. Aber GetitemNodes und GetItemDesc geht - siehe angehängtes Bild...


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.10.2011, 14:17 (Dieser Beitrag wurde zuletzt bearbeitet: 17.10.2011 14:22 von rolfk.)
Beitrag #14

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL einbinden für Intel-Atom N270 an SuperI/O-Chip
(17.10.2011 12:08 )ralph.d schrieb:  Hab's nochmal probiert mit Verweis auf die DLL im Knoten selbst. Leider kein Erfolg. Aber GetitemNodes und GetItemDesc geht - siehe angehängtes Bild...

Sagen wir's so: GetItemDesc kracht zwar nicht, aber etwas im Speicher ist garantiert korrumpiert nach dem Aufruf dieser Funktion. Der 4. Parameter dieser Funktion ist nämlich ein Byte Array das vom Aufrufer alloziert werden muss. D.h. man sollte diesen Parameter als Arraypointer von U8 konfigurieren und mit Initialize Array ein Byte Array anlegen und übergeben. Im 3. Parameter übergibt man dann die Länge dieses Arrays und nach Rückkehr kürzt man das Array mit Array Subset auf die Länge die vom 3. Parameter zurückgegeben wurde.

Wenn die Funktion im 3.Parameter einen grösseren Wert zurückgibt dann man am Eingang angegeben hat, hat sie gemäss Dokumentation über das Ende des übergebenen Buffers geschrieben und damit eine Speicherkorrumption verursacht. So wie Du es im Moment implementiert hast übergibst Du einen 16 bit Integer als Buffer, also die Funktion kann genau 2 Bytes reinschreiben ohne den Speicher zu korrumpieren. Zudem initilisierst Du sowohl den 3. als auch den 4. Parameter nicht so dass es unsicher ist was die Funktion den darin überhaupt sieht.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.10.2011, 13:45
Beitrag #15

ralph.d Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jul 2011

8.20 PDS
2000
DE



RE: DLL einbinden für Intel-Atom N270 an SuperI/O-Chip
OK. Vielen Dank für die Hilfe. Aber die GetitemNodes und GetItemDesc brauch ich eigentlich nicht wirklich... Hab ich nur probiert, da ich GetData nicht hinbekommen habe.
Und bei GetData kommen nur die Werte wieder raus, die ich im Array angelegt habe und in die DLL übergeben werden. Irgendwie ist das falsch. Als Rückmeldung von GetData bekomme ich ja auch "0" d.h. Fehler. Aber warum ? Ist das angelegte Array falsch initialisiert ?
Habe alle DLL Verweise rausgenommen und nur direkt im Knoten angegeben. Kein Erfolg...
Haben sie vielleicht noch ne Idee ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.10.2011, 17:06 (Dieser Beitrag wurde zuletzt bearbeitet: 19.10.2011 17:08 von rolfk.)
Beitrag #16

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL einbinden für Intel-Atom N270 an SuperI/O-Chip
(19.10.2011 13:45 )ralph.d schrieb:  OK. Vielen Dank für die Hilfe. Aber die GetitemNodes und GetItemDesc brauch ich eigentlich nicht wirklich... Hab ich nur probiert, da ich GetData nicht hinbekommen habe.
Und bei GetData kommen nur die Werte wieder raus, die ich im Array angelegt habe und in die DLL übergeben werden. Irgendwie ist das falsch. Als Rückmeldung von GetData bekomme ich ja auch "0" d.h. Fehler. Aber warum ? Ist das angelegte Array falsch initialisiert ?
Habe alle DLL Verweise rausgenommen und nur direkt im Knoten angegeben. Kein Erfolg...
Haben sie vielleicht noch ne Idee ?

Was ist der Wert der von ISMM_Open zurückgeliefert wird? Der Test auf gleich NULL davon ist falsch. Zwar kann er nie NULL sein aber der Wert der im Fehlerfall zurückgegeben wird ist -1. Wenn die Funktion also -1 zurückgibt bewirkt der Test dass die anderen Funktionen doch ausgeführt werden aber wenn sie intelligent programmiert sind machen sie einen Plausiblitätscheck bevor sie versuchen dieses Handle zu dereferenzieren. Und NULL und -1 sind halt eben keine gültigen Werte, so dass es gut sein kann dass die Funktion unmittelbar mit einem Fehlercode zurückkehrt.

Wenn bei ISMM_Open -1 rauskommt, wird der nächste Schritt sein herauszufinden weshalb das so ist. Dazu sollte man den Fehlercode der Windows API Funktion GetLastError() abfragen aber um das in LabVEIW sinnvoll zu machen und nicht irgendeinen Code zu lesen sondern der von der vorhergehenden Funktion, muss man den Funktionsaufruf und den Aufruf von GetLastError() in ein SubVI stopfen und dieses als Subroutine Priorität konfigurieren. Ansonsten können andere Funktion von LabVIEW zwischen den beiden Call Library Nodes aufgerufen werden die den GetLastError() ebenfalls modifizieren.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
20.10.2011, 08:17
Beitrag #17

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL einbinden für Intel-Atom N270 an SuperI/O-Chip
(19.10.2011 13:45 )ralph.d schrieb:  OK. Vielen Dank für die Hilfe. Aber die GetitemNodes und GetItemDesc brauch ich eigentlich nicht wirklich... Hab ich nur probiert, da ich GetData nicht hinbekommen habe.
Und bei GetData kommen nur die Werte wieder raus, die ich im Array angelegt habe und in die DLL übergeben werden. Irgendwie ist das falsch. Als Rückmeldung von GetData bekomme ich ja auch "0" d.h. Fehler. Aber warum ? Ist das angelegte Array falsch initialisiert ?
Habe alle DLL Verweise rausgenommen und nur direkt im Knoten angegeben. Kein Erfolg...
Haben sie vielleicht noch ne Idee ?

Ok ich habe mich mal hingesetzt und eine Stunde meiner kostbaren Zeit geopfert, und das im Anhang ist was rausgekommen ist. So hätte die ganze Sache von Beginn an angepackt werden können. Ich bekomme auf meinem System error 1011 in ISMM_Open. Die DLL scheint einfach Windows API error Codes zu verwenden, also muss man bei Microsoft in MSDN nachschauen was diese bedeuten. In diesem Fall bedeutet es dass der Konfigurations-Registrykey nicht gefunden werden kann. Eine nicht ganz deutliche Fehlermeldung, aber mehr gibts halt nicht.

   


0.0 .zip  ISMM.zip (Größe: 119,52 KB / Downloads: 225)

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: