来自vb.net的.dll函数失败,但是从vb6

时间:2017-08-18 21:12:03

标签: c++ vb.net dll vb6 vb6-migration

我有一个由第三方提供的测试设备。该设备通过以太网端口连接到计算机,用于在生产环境中测试汽车传感器,该设备提供了.dll和.lib文件。

当我从vb.net中的dll调用“connect_function”时,该函数返回一个负数,表示与设备的连接失败。

当我从vb6中的dll或C中的lib调用“connect-function”时,该函数返回零,表示连接成功。

我完全不是'程序员',尽管我最终做了很多编程作为制造工程师。我完全不知道如何进一步排除故障。我试过编组数据,直到我脸红了,但我不认为这是问题,因为调用成功,它只是dll没有连接。

所以这就要问:vb6和c ++进行函数调用的方式与vb.net进行函数调用的方式有什么不同?

更新:2017年8月22日: 谢谢你的回复!我已经将下面的代码简化了。

在所有情况下,我都没有收到任何编译器错误,但只有在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;
}

1 个答案:

答案 0 :(得分:0)

我的Visual Studio 2013配置为将我的项目文件保存到Windows&#34;我的文档&#34;文件夹,我的IT部门已重新路由到公司网络。 VB6和C的东西在我的本地磁盘上(C :)。

当我将vb.net(Visual Studio 2013)项目文件夹移动到我的本地磁盘(C:\ VB)时,dll正常工作。

感谢所有花时间审查此主题。我无法解释为什么会产生影响,但希望它能帮助将来的某个人。