У меня есть тестовое устройство, поставляемое третьей стороной. Устройство подключается к компьютеру через порт Ethernet и используется для тестирования автомобильных датчиков в производственной среде, устройство снабжено файлами .dll и .lib.
Когда я вызываю «connect_function» из dll в vb.net, функция возвращает отрицательное число, указывающее, что соединение с устройством не удалось.
Когда я вызываю «connect-function» из dll в vb6 или lib в C, функция возвращает ноль, указывая на успешное соединение.
Я точно не «программист», хотя я много занимаюсь программированием как инженер-технолог. Я полностью озадачен поиском неисправностей в дальнейшем. Я пробовал маршалировать данные до тех пор, пока я не посинел, но я не думаю, что это проблема, потому что вызов успешен, просто DLL не подключается.
Итак, все, что нужно спросить: что отличается между тем, как vb6 и c ++ выполняют вызовы функций, и тем, как vb.net выполняет вызовы функций?
Обновление: 22.08.2017:
Спасибо за ответы! Я свел код ниже.
Во всех случаях я не получаю никаких ошибок компилятора, но только в vb.net dll возвращает отрицательный результат. Я не понимаю, как dll узнает разницу.
Код Vb.net:
Imports System.Runtime.InteropServices
Module Module1
<DllImport("myDevice.dll")> _
Public Function CreateDeviceObject _
(ByVal deviceType As Integer, _
ByVal deviceNum As Integer, _
ByVal deviceChan As Integer, _
ByVal deviceName As String, _
ByRef pointerToHandle As Integer) As Integer
End Function
End Module
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim myHandle As Integer
MsgBox("CreateAPSxObject Returned: " & CreateDeviceObject(2, 1, 1, "yo", myHandle))
End Sub
End Class
Код VB6:
Private Declare Function CreateDeviceObject Lib "myDevice.dll" _
(ByVal deviceType As Long, _
ByVal deviceNum As Long, _
ByVal deviceChan As Long, _
ByVal deviceName As String, _
ByRef pointerToHandle As Long) As Long
Public myHandle As Long
Private Sub Command1_Click()
MsgBox (CreateDeviceObject(2, 1, 1, "yo", myHandle))
End Sub
Код C:
#include <stdio.h>
#include <stdlib.h>
int __stdcall CreateDeviceObject (int, int,int,char *,int *);
int main()
{
int myError=0, myHandle;
myError = CreateAPSxObject(2,1,1,"yo",&myHandle);
printf("Return=%d: ",myError);
return 0;
}
Моя Visual Studio 2013 была настроена для сохранения файлов моего проекта в папке Windows «Мои документы», которую мой ИТ-отдел перенаправил в сеть компании. Материал VB6 и C был на моем локальном диске (C :).
Когда я переместил папку проекта vb.net (Visual Studio 2013) на свой локальный диск (C: \ VB), dll работала как надо.
Спасибо всем, что нашли время пересмотреть эту тему. Я не могу объяснить, почему это имело значение, но, надеюсь, это поможет кому-то в будущем.
Других решений пока нет …