msv错误LNK2001:无法解析的外部符号

MSVS error LNK2001: unresolved external symbol

本文关键字:外部 符号 错误 LNK2001 msv      更新时间:2023-10-16

我正在构建一个简单的项目,通过COM端口连接打开/关闭继电器。即使在网上搜索了几个小时后,我也找不到解决链接错误的方法:

1>------ Build started: Project: relayon, Configuration: Release Win32 ------
1>  relayon.cpp
1>relayon.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __stdcall CP210xRT_WriteLatch(void *,unsigned char,unsigned char)" (__imp_?CP210xRT_WriteLatch@@YGHPAXEE@Z)
1>C:UsersStenDocumentsVisual Studio 2010ProjectsrelayonReleaserelayon.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

这是我的代码:

cp210xruntimedl .h (from Silicon Labs)

#include <windows.h>
#ifdef CP210xRUNTIMEDLL_EXPORTS 
#define CP210xRUNTIMEDLL_API __declspec(dllexport) 
#else 
#define CP210xRUNTIMEDLL_API __declspec(dllimport)
#endif 
#define     CP210x_MAX_SETUP_LENGTH                 65536 
#ifndef _CP210x_STANDARD_DEF_ 
#define _CP210x_STANDARD_DEF_ 
// GetDeviceVersion() return codes 
#define     CP210x_CP2101_VERSION               0x01 
#define     CP210x_CP2102_VERSION               0x02 
#define     CP210x_CP2103_VERSION               0x03 
// Return codes                                  
#define     CP210x_SUCCESS                      0x00 
#define     CP210x_DEVICE_NOT_FOUND             0xFF 
#define     CP210x_INVALID_HANDLE               0x01 
#define     CP210x_INVALID_PARAMETER            0x02 
#define     CP210x_DEVICE_IO_FAILED             0x03 
#define     CP210x_FUNCTION_NOT_SUPPORTED       0x04 
#define     CP210x_GLOBAL_DATA_ERROR            0x05 
#define     CP210x_COMMAND_FAILED               0x08 
#define     CP210x_INVALID_ACCESS_TYPE          0x09 
// Type definitions 
typedef     int     CP210x_STATUS; 
#endif /*_CP210x_STANDARD_DEF_*/ 
// Mask and Latch value bit definitions 
#define     CP210x_GPIO_0                       0x01 
#define     CP210x_GPIO_1                       0x02 
#define     CP210x_GPIO_2                       0x04 
#define     CP210x_GPIO_3                       0x08 
CP210xRUNTIMEDLL_API CP210x_STATUS WINAPI 
CP210xRT_ReadLatch( HANDLE cyHandle, 
                LPBYTE  lpbLatch); 
CP210xRUNTIMEDLL_API CP210x_STATUS WINAPI 
CP210xRT_WriteLatch(    HANDLE cyHandle, 
                BYTE    bMask, 
                BYTE    bLatch); 

CP210xRUNTIMEDLL_API CP210x_STATUS WINAPI 
CP210xRT_GetPartNumber( HANDLE cyHandle, 
                            LPBYTE  lpbPartNum); 

relayon.cpp

#include "CP210xRuntimeDLL.h"
#include <windows.h>
int main()
{
    // String for COM port
    LPCWSTR comport = L"\\.\COM3";
    // Create handle for COM
    HANDLE hCOM = CreateFile(comport,
        GENERIC_READ | GENERIC_WRITE,
        0,
        0,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
        0);
    // Purge COM (enable read/write and clear io buffers)
    PurgeComm(hCOM, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
    // Save COM origional state
    DCB dcbCOMInitialState;
    GetCommState(hCOM, &dcbCOMInitialState);
    // Set new state
    DCB dcbCOM = dcbCOMInitialState;
    dcbCOM.BaudRate = 57600;
    dcbCOM.Parity = NOPARITY;
    dcbCOM.ByteSize = 8;
    dcbCOM.StopBits = ONESTOPBIT;
    SetCommState(hCOM, &dcbCOM);
    Sleep(60);
    // WRITE !
    CP210xRT_WriteLatch(hCOM, 15, 0);
    Sleep(2000);
    CP210xRT_WriteLatch(hCOM, 15, 1);
    // Close COM (first back to initial state)
    SetCommState(hCOM, &dcbCOMInitialState);
    Sleep(60);
    CloseHandle(hCOM);
    hCOM = INVALID_HANDLE_VALUE;
    return 0;
}
有人能帮我一下吗?我都快疯了!

提前感谢,

Sten

编辑1 molbdnilo提供的解决方案可以解决这个错误,但会产生另一个相同类型的错误:

1>------ Build started: Project: relayon, Configuration: Release Win32 ------
1>  relayon.cpp
1>relayon.obj : error LNK2001: unresolved external symbol __imp__CP210xRT_WriteLatch@12
1>C:UsersStenDocumentsVisual Studio 2010ProjectsrelayonReleaserelayon.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我很惊讶头部没有c++"包装器",因为它看起来像一个C API。
也就是说,

#ifdef __cplusplus
extern "C"
{
#endif

放在最上面,

#ifdef __cplusplus
}
#endif

在底部