Programmieren - alles kontrollieren 4.934 Themen, 20.613 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