Hallo an alle,
ich muss an eine Methode über ActiveX eine "NULL" übergeben.
Nun habe ich sowas noch nie gemacht, und habe keine Ahnung wie das genau geschehen soll.
Anbei mal ein Bild der Beschreibung der Methode. Ebenfalls ein Beispiel in Basic, welches in der Beschreibung dabei war. Der Rot umrahmte Teil ist es da.
Hoffe es kann mir jemand helfen.
Es geht um das Thema Quality Center ehemals Test Director von HP, falls das einem was sagt, und das evtl weiter helfen sollte.
Viele Dank schonmal.
Sollte ich noch Infos nachreichen, mache ich das gerne.
' schrieb:ich muss an eine Methode über ActiveX eine "NULL" übergeben.
Kennst du denn die Methode respektive den Knoten, der in LV aufgerufen werden muss?
Im einfachsten Falle hat dieser Knoten dann einen Parameter, dem du einfach den numerischen Wert Null gibst.
Der Wert NULL in C/C++ ist ein nicht-assignder Pointer, also ein Pointer, der auf keinen Speicher zeigt. "kein Speicher vorhanden" heißt also NULL. Physikalisch gesehen hat der Wert NULL den numerischen Wert Null.
' schrieb:Kennst du denn die Methode respektive den Knoten, der in LV aufgerufen werden muss?
Morgen,
ja, den Knoten kenne ich (siehe Bild im Anhang, roter Kasten)
Als Übergabeparameter will der einen Variant haben.
' schrieb:Im einfachsten Falle hat dieser Knoten dann einen Parameter, dem du einfach den numerischen Wert Null gibst.
Das habe ich schon versucht, brachte aber keinen Erfolg. Ich erhalte dann einen Fehler von diesem Knoten zurück, der aber nicht Dokumentiert ist.
Ein lehren Variant zu übergeben, funktioniert auch nicht. Ebenfalls ein Fehler.
Einzig funktioniert ein lehrer String. Da kommt keine Fehlermeldung zurück, aber die nachfolgenden Funktionen lassen sich nichtmehr gescheit ansprechen. Da dann (ich vermute mal) kein virtuelles "AddItem" erzeugt wird, sondern ein normales, welches als Namen einen leeren String hat. Damit kann ich aber nicht arbeiten.
Nun dachte ich, jemand wüsste evtl. wie man eine "NULL" übergibt, und das Problem wäre einfach zu lösen...
Gruß
' schrieb:Als Übergabeparameter will der einen Variant haben.
Hätte ich mir denken können.
Zitat:Das habe ich schon versucht,
Mit einem U32? Kein I32!
Zitat:Ich erhalte dann einen Fehler von diesem Knoten zurück, der aber nicht Dokumentiert ist.
Naja, sagt doch schon wieder alles.
Zitat:Ein lehren Variant zu übergeben, funktioniert auch nicht.
Ja. Ein leerer Variant enthält nix. Dieses Nix ist aber was anderes als NULL. NULL ist ein Wert. Nix ist nix.
Zitat:Einzig funktioniert ein lehrer String. Da kommt keine Fehlermeldung zurück, aber die nachfolgenden Funktionen lassen sich nichtmehr gescheit ansprechen. Da dann (ich vermute mal) kein virtuelles "AddItem" erzeugt wird, sondern ein normales, welches als Namen einen leeren String hat. Damit kann ich aber nicht arbeiten.
Möglicherweise unterstützt dieser Knoten virtuelle Items nicht.
' schrieb:Mit einem U32? Kein I32!
Ja, auch ein U32 (U16,U8) bringt keine Besserung, sondern nur wieder einen Fehler...
' schrieb:Möglicherweise unterstützt dieser Knoten virtuelle Items nicht.
Wenn du in mein erstes Bild schaust, im ersten posting, unter "Remarks" steht da ganz klar, das es geht.
Mittlerweile habe ich auch rausgefunden, dass wenn ich einen leeren String übergebe, wird ein nicht virtuelles Item erzeugt, welches einfach keinen Namen hat. Ziemlich sinnfrei. Aber OK.
Ich muss also ein "NULL" übergeben...
Hast du auch mal probiert, den U32 mit einem DataToVariant-Element in einen Variant zu konvertieren und diesen Variant dann auf das Element gegeben? Oder gleich einen U32 in eine Variant-Konstante gelegt?
Pech hast du natürlich, wenn der Knoten einen Pointer auf den Eingang generiert.
Zitat:Ich muss also ein "NULL" übergeben...
Hast du mal in der Hilfe zum Knoten nachgelesen, ob und die man NULL übergibt?
' schrieb:Hast du auch mal probiert, den U32 mit einem DataToVariant-Element in einen Variant zu konvertieren und diesen Variant dann auf das Element gegeben?
Umwandeln hat keine Änderung zur Folge.
' schrieb:Oder gleich einen U32 in eine Variant-Konstante gelegt?
Wie geht das? Ein U32 Konsstante einfach auf eine Variant Konstante zu ziehen, geht nicht. Dann liegen die nur übereinander...
' schrieb:Hast du mal in der Hilfe zum Knoten nachgelesen, ob und die man NULL übergibt?
Die einzige Beschreibung die ich dazu habe, sind die Beiden Bilder aus meinem ersten Post. Die sind nicht gerade aussagekräftig. Vll wirst du da schlauer draus.
Wenn ich da heute zu nichts mehr komme, schreibe ich mir halt nen C# Wrapper, für diesen einen kleinen Mist.
Kostet mich nur auch wieder Zeit, da ich mich in C# auch wieder einarbeiten muss.
Dachte es gäbe da eine einfache Lösung in LabVIEW
' schrieb:Die einzige Beschreibung die ich dazu habe, sind die Beiden Bilder aus meinem ersten Post. Die sind nicht gerade aussagekräftig. Vll wirst du da schlauer draus.
Nein, daraus werde ich nicht schlau.
Das Problem liegt wohl ehen an LV respektive dem Knoten.
Ich gehe davon aus, die Methode AddItem will einen Objektzeiger (ItemData) haben. Oder eben NULL. So wie es aussieht generiert der LV-Knoten aber einen Pointer auf einen Variant, der per se immer einen Inhalt hat. Dieser Variant ist eben der Eingang in den Knoten. Der Knoten müsste jetzt aber einen NULL-Pointer generieren, was aber nicht geht, da grundsätzlich ein Eingang vorhanden ist. Dumm gelaufen. Hier müsste es also einen Sonderfall in LV geben. So sehe ich das jetzt.
Zitat:für diesen einen kleinen Mist.
So ist das eben als Programmierer: 90% der Arbeitszeit gehen für 10% Kleinigkeiten drauf.
' schrieb:So ist das eben als Programmierer: 90% der Arbeitszeit gehen für 10% Kleinigkeiten drauf.
Ja, da hast du wohl recht
Ich lasse mir jetzt von einem bekannten, um Zeit zu sparen, eine dll in C# schreiben.
Dann sollte es hoffentlich gehen...
Ich weiss nicht ob das vor LabVIEW 2009 auch schon bestand, aber schau mal
hier!
Wahrscheinlich eine Schnappsidee aber hast Du schon versucht einfach eine leere Variant Konstante anzuhängen?
Rolf Kalbermatter