QT CMakelists添加第三方类库

//此函数用来判断网口是否连接正常,需要首先在cpp当中添加头文件

#include <sensapi.h>
...

BYTE checkNetworks()
{
    DWORD dwCode;
    if(!IsNetworkAlive(&dwCode))
        return 0;
    return 1;
}


//此函数用来检查特定的USB句柄设备是否完好,也是首先需要添加头文件

#include <winioctl.h>
#include <setupapi.h>
#include <initguid.h>
...

DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,
            0xA5DCBF10L,   0x6530,   0x11D2,   0x90,   0x1F,   0x00,   0xC0,   0x4F,   0xB9,   0x51,   0xED);
#define   GUID_CLASS_USB_DEVICE   GUID_DEVINTERFACE_USB_DEVICE

BOOL GetMyUsbDeviceLabel(const char *sHandle)//输入设备句柄ID字符串,判断是否正常
{
    LPGUID lpGuid = (LPGUID)&GUID_CLASS_USB_DEVICE;
    int INTERFACE_DETAIL_SIZE = 1024;
    int nCount = 0;
    HDEVINFO info = SetupDiGetClassDevsA(lpGuid, NULL, NULL, DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);

    //enumerate device information
    DWORD required_size = 0;
    int i;
    SP_DEVINFO_DATA DeviceInfoData = { sizeof(DeviceInfoData) };

    unsigned long DataT;
    BOOL flag = FALSE;
    //DWORD buffersize = 1024;
    unsigned long req_bufsize = 0;

    for (i=0;SetupDiEnumDeviceInfo(info,i,&DeviceInfoData);i++)
    {
        char locid[1024];
        if (!SetupDiGetDeviceRegistryPropertyA(info, &DeviceInfoData, SPDRP_HARDWAREID, &DataT, (LPBYTE)locid, 1024, &req_bufsize))
            continue;
        if(strstr(locid,sHandle) != NULL)
        {
            flag = TRUE;
            break;
        }
    }

    SetupDiDestroyDeviceInfoList(info);
    return flag;
}

以上用两个windows下面的QT creator引用第三方类库,举例说明问题。

如果只是添加的引用头文件以后,是不行的,这样写QT Creator编译是无法通过的,提示找不到对应的函数体实现。如:

undefined reference to '_imp_SetupDiGetClassDevs'....类似这种带有_imp前缀的错误提示之类的。

需要打开项目的CMakeLists.txt

手动添加关于第三方类库的两行代码:

target_link_libraries(myProjectname PRIVATE Sensapi)
target_link_libraries(myProjectname PRIVATE Setupapi)

再次编译,不再出现错误

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值