VS2015移植项目,连接CAN失败

问题遇到的现象和发生背景

环境:都是win10+VS2015
相同的项目,在A电脑中可以成功(amd处理器)
但在B电脑中无法实现(intel处理器)
配置相同,包含目录和库目录,依赖库添加都相同(opencv,CAN_lib文件)
release X64下生成解决方案没问题:
依赖库文件:(opencv_world420.lib,ControlCAN.lib)
(CAN_lib相关文件:ConrolCAN.h、ControlCAN.dll、kerneldlls文件夹 都已放在项目中)

问题相关代码,请勿粘贴截图
    {
        if (openCAN.RunCAN(0) == 1)
        {
            cout << "Successfully opened CAN0"<< endl;
        }
        if (openCAN1.RunCAN(1) == 1)
        {
            cout << "Successfully opened CAN1" << endl;
        }
    }
    else
    {
        cout << "openCAN.RunDevive():" << openCAN.RunDevive() << endl;
        openCAN.StopCAN();//输出usbcan is not exist
    }

RunDevive()定义

int OpenCAN::RunDevive()
{
    return (VCI_OpenDevice(DeviceType, DeviceIndex, Reserved));
}

OpenDevice定义(在B电脑中返回0,正确的应该返回1)

EXTERNC DWORD __stdcall VCI_OpenDevice(DWORD DeviceType,DWORD DeviceInd,DWORD Reserved);
运行结果及报错内容

报错如下:

img

我的解答思路和尝试过的方法

1、在移植项目过程中遇到错误
fatal error C1189: #error: "No Target Architecture"
在C++ - 预处理器中添加 _AMD64_ 报错解决
这里想问下跟处理器类型有关系吗?(A电脑amd, B电脑intel,C电脑intel也失败)
补充:了解到CAN_lib文件只有X32和X64之分,不区分处理器,并且在另一个intel电脑能成功,所以这个思路应该不对

2、使用cantest对CAN信号进行测试
选择设备:USBCAN2,设置滤波为500,两个通道都能接收到数据
个人觉得CAN卡是没问题的,就是电脑和CAN连接上面出现了点问题

我想要达到的结果

img

求大佬支个招啊,卡了好几天了,一直没法解决

看样子是跟CPU类型有关,CAN_lib是你自己编译的吗?如果是,那么你可能要在intel cpu的电脑上重新编译一下

应该是编译选项选择错误,应该添加x64编译选项,不适用amd编译选项。

猜你是不是有调用window.h文件

VS2015 不行,VS2019 应该也不可以吧

1、跟cpu无关。
2、很明显can总线设备打开失败,若A电脑测试可用,并且B电脑编译通过,则看一下can总线转usb的配置或者驱动等方面的相关问题。

一般不同处理器之间底层实现是有差异的,有些可能代码编译时就会出现你这种情况,最主要考虑消费者的环境做适配吧

这个代码是操作硬件吗,是不是不兼容Intel cpu架构,在开发时只支持了AMD cpu架构啊

版本太低了,换高版本吧,现在windows低版本都没人维护了,软件一样得换成高版本,才能兼容低版本。

CAN连接的设备用的是什么?感觉这个像是设备接口或者编号之类的问题,DeviceType, DeviceIndex的位置设个断点看看两台有没有区别

问题解决!
将CAN_lib文件夹中的ControlCAN.dll 拷贝到生成的可执行文件.exe中即可
原因未知:A电脑并不需要这样,B电脑中system32中也拷贝了这个dll文件,但失败
项目树状图

  • ProjectName
    • ProjectName
      • 之前CAN_lib相关文件是在此处,无效
    • X64
      • release
      • ProjectName.exe
      • ControlCAN.dll放在此处,成功
  • ……