есть длл написанная на C++, позволяющая управлять девайсом.
есть к ней описание функций.
надо подконнектить к девайсу. вот мой код:
- Код: Выделить всё
Imports System.Runtime.InteropServices
Public Class Form1
<DllImport("devlib.dll", EntryPoint:="devOpen", CharSet:=CharSet.Unicode)> _
Private Shared Function devOpen(ByVal ip As String, ByVal player As String, ByRef handle As Long) As Long
End Function
...
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim i_err As Long = 0, h_ as Object
i_err = devOpen("10.1.0.1", "Player_1", h_)
End Sub
End Class
как оно работает на примере, написанном на С++: функция хочет два стринга ип и имя плеера, 3й параметр - возвращаемый хендлер.
сама фунцкция возвращает код ошибки (0 == всё ок).
есть описание в АПИ функции от вендора.
на строке
- Код: Выделить всё
i_err = devOpen("10.1.0.1", "Player_1", h_)
получаю ошибку Вызов функции PInvoke "proj!WindowsApplication1.Form1::devOpen" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой. Убедитесь, что соглашение о вызовах и параметры сигнатуры PInvoke совпадают с неуправляемой целевой сигнатурой.
почитал много форумов, MSDN, вроде всё понимаю, но не знаю как это победить.
1) я не уверен, что кодировка Unicode. возможно Ansi. как это выяснить?
2) в правильном формате ли я ей передаю ип и имя плеера? возможно нужны указатели. как это сделать?
3) коды ошибок i_err в виде 0x904B. 16тиричные, насколько я понимаю. как правильно объявить эту переменную?
помогите пожалуйста, уточняйте любые моменты. докуументация на руках и Сишный рабочий код тоже.
Спасибо!