Функция из .dll не работает с vb.net, но работает с vb6

У меня есть тестовое устройство, поставляемое третьей стороной. Устройство подключается к компьютеру через порт 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;
}

2

Решение

Моя Visual Studio 2013 была настроена для сохранения файлов моего проекта в папке Windows «Мои документы», которую мой ИТ-отдел перенаправил в сеть компании. Материал VB6 и C был на моем локальном диске (C :).

Когда я переместил папку проекта vb.net (Visual Studio 2013) на свой локальный диск (C: \ VB), dll работала как надо.

Спасибо всем, что нашли время пересмотреть эту тему. Я не могу объяснить, почему это имело значение, но, надеюсь, это поможет кому-то в будущем.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]