Liebe VB Gemeinde,
ich möchte mit VB (Visual Studio 2010) eine .dll aufrufen. Dabei habe ich meiner Meinung nach ein Problem mit der Übergabe der parameter. Die Funktion wurde in C folgendermaßen definiert, bevor sie in eine .dll umgewandelt wurde:
Mit VB wollte ich nun diese .dll folgendermaßen aufrufen:
Ich habe schon probiert die ByVal und die Byref Ausdrücke auszutauschen, so wie sie jetzt gesetzt sind dürfte es passen (die .dll zeigt die Eingangsdaten in einem externen Fenster korrekt an). Ich bekomme jedoch immer den Fehler PInvokeStackImbalance.. Ich vermute es liegt an der Übergabe an den pointer double** output2d.
Kann mir irgendwer helfen und sagen, wie ich die .dll richtig anspreche??
Vielen Dank und schöne Grüße,
Alexander
ich möchte mit VB (Visual Studio 2010) eine .dll aufrufen. Dabei habe ich meiner Meinung nach ein Problem mit der Übergabe der parameter. Die Funktion wurde in C folgendermaßen definiert, bevor sie in eine .dll umgewandelt wurde:
Mit VB wollte ich nun diese .dll folgendermaßen aufrufen:
Quellcode
- Imports System.Runtime.InteropServices
- Module Module1
- Public test_data(0 To 2, 0 To 2) As Double
- Public test_size As Integer
- Public mess As String
- Public test_output_2d As Double
- Public stat_int As Integer
- 'Declare Function wh_fun Lib "level2.dll" Alias "_wmlfLevel1" (ByVal data(,) As Double, ByVal size As Integer, ByVal message As String, ByRef output2d() As Double) As Integer
- <DllImport("level2.dll")> Function _wmlfLevel1(ByVal input2D(,) As Double, ByVal size As Integer, ByVal message As String, ByRef output As Double) As Integer
- End Function
- Sub Main()
- test_data(0, 0) = 1
- test_data(0, 1) = 2
- test_data(0, 2) = 3
- test_data(1, 0) = 4
- test_data(1, 1) = 5
- test_data(1, 2) = 6
- test_data(2, 0) = 7
- test_data(2, 1) = 8
- test_data(2, 2) = 9
- test_size = 3
- mess = "Test"
- stat_int = _wmlfLevel1(test_data, test_size, mess, test_output_2d)
- End Sub
- End Module
Ich habe schon probiert die ByVal und die Byref Ausdrücke auszutauschen, so wie sie jetzt gesetzt sind dürfte es passen (die .dll zeigt die Eingangsdaten in einem externen Fenster korrekt an). Ich bekomme jedoch immer den Fehler PInvokeStackImbalance.. Ich vermute es liegt an der Übergabe an den pointer double** output2d.
Kann mir irgendwer helfen und sagen, wie ich die .dll richtig anspreche??
Vielen Dank und schöne Grüße,
Alexander