Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge

Probleme bei der Migration von VB6 -> VB.Net bei Übergabe von Ar

Simon1 / 1 Antworten / Flachansicht Nickles

Hallo zusammen,
ich habe folgendes Problem:


Ich habe folgenden VB6-Code:
<pre>
in der .bas-Datei:
Declare Function XDA_Ain_SetBuffer Lib "exacqda.dll" Alias "XDA_Ain_SetBufferSA" (ByVal device As Long, ByVal count As Long, buffer() As Any) As Long


im Code:
Dim iBuffer(1 To 4096) As Integer
status = XDA_Ain_SetBuffer(iDevice, Size, iBuffer())
</pre>
Dieser Code soll den Buffer einer Digitizer-Karte reservieren. iBuffer ist dann der Pointer auf den Buffer. Funktioniert auch alles super, doch wegen einer anderen Komponente muss ich dies nach VB.Net rüberbringen.


Lässt man den Assistenten drauflos, so erzählt er einem, dass es halt AS ANY nicht mehr gibt. (ist kein Problem, da Array eh immer AS SHORT ist)


Der Code sieht dann so aus:
<pre>
in der .bas-Datei:
Declare Function XDA_Ain_SetBuffer Lib "exacqda.dll" Alias "XDA_Ain_SetBufferSA" (ByVal device As Long, ByVal count As Long, buffer() As short) As Long


in dem Form:
Dim iBuffer(4096) As Short
status = XDA_Ain_SetBuffer(iDevice, Size, iBuffer)
</pre>
Jetzt kommt aber eine Fehler-Meldung (von der exacqda.dll):
"A null pointer was passed to the function."


Tja, vb.net scheint dies nicht mehr als Pointer auf das Array anzusehen. Ein mehr oder weniger fauler Trick ist ja, das erste Element zu übergeben, jedoch dann stellt es fest, dass ich ein einfaches short zum 1-dimension-short-Array machen will. Ok, sehe ich ein, kann nicht gehen.
Nur wie dann? Die Dll kann nicht geändert werden.
Vielen Dank fürs Lesen
Simon
PS: vb.net warnt mich auch, dass die Arrays nun bei 0 statt bei 1 beginnen. Ich glaube zwar nicht, dass es etwas damit zu tun hat, aber vielleicht bringt es ja einen auf DIE bahnbrechende Idee.

bei Antwort benachrichtigen
HADU Simon1 „Probleme bei der Migration von VB6 -> VB.Net bei Übergabe von Ar“
Optionen

Hi,
in vb6 schreibst Du
status = XDA_Ain_SetBuffer(iDevice, Size, iBuffer())
und in vb.net
status = XDA_Ain_SetBuffer(iDevice, Size, iBuffer)

<unwissend fragend> ist das Absicht, dass Du bei vb.net die Klammern weglässt? </unwissend fragend>

Das Array in vb6 geht von 1 bis 4096
Das in vb.net geht von 0 bis 4095
Vielleicht hängt es daran ...
Wenn Du das Array ganz offen lässt?
Dim iBuffer() As Short

Gruß HADU

bei Antwort benachrichtigen