环境:都是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);
报错如下:
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连接上面出现了点问题
求大佬支个招啊,卡了好几天了,一直没法解决
看样子是跟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文件,但失败
项目树状图:
ControlCAN.dll
放在此处,成功