Klingelt es da nicht im Köfpchen
pointer - 8 ist der ReferenzZähler
pointer - 4 ist die Längenangabe
pointer - 0 ist der Zeiger auf das erste Zeichen
Ne, hier klingelt nichts, kann auch nicht. siehe im Quellcode den erzeugten String.
Wo ist denn da der Zusammenhang zum VB String BYVAL ????????????????????????????????????????????
Ich gehe mal davon aus, daß du ein aufmerksamer Leser bist. Aber ich erkläre es dir gerne nochmal kurz, was VB ByVal String mit der ganzen Sache zu tun hat. Auf gehts:
In der Dokumentation gab es Beispieldeklarationen in VB, darunter auch eben jene OPENDEVICE, die an den betrefflichen Stellen mit byVal as Sting funktionieren sollt. Darauf hin hab ich das auch mit VB getestet, was auch funktionierte.
Es stellte sich dann also die Frage, "was macht Visual Basic da wirklich?".
Fakt ist, Strings die in VB mit ByVal übergeben werden, sind eine Ausnahme bei der Parameterübergabe. Was macht VB: VB arbeitet mit BSTR unicode. VB macht daraus ASCII. BSTR hat Längenangabe - der resultierende String dann auch. Weiter hin stellt VB einen Zeiger auf das erste DATENBYTE, also an Stelle 4 (von 0 ausgegangen). Und nun kommts: VB übergibt den Zeiger, und keinen Sting. Als ich das endlich sicher wusste, konnte ich genau jenen Weg einschlagen, um diese Ergebnis zu erzielen. Darin liegt einfach der Zusammenhang. Im Grunde genommen sorgte das erst a) für sicherheit in welcher Weise es funktionieren muss und b) konnte ichn auch die DLL-Frage lösen.
Ich bin mir auch weiter sicher (ist ja keine Schande das zumindest jetzt zu erkennen), schon recht früh die Lösung gehabt zu haben, habe dabei aber noch einen Gedankenfehler bei DeviceID in DevNum gehabt. Sowas passiert hat mal, wenn man aus einem Code Passagen aus ihren Zusammenhängen löst.
Sei dir aber meines Dankes gewiss.
Galahat