我正在研究从一些旧的Delphi代码到VC ++ 2013的端口,我遇到了一个错误,我觉得应该是一个简单的解决方案,但不能为我的生活找出...
问题是:我在本地文件Utils.h中有许多常用的实用程序函数,我将其作为Windows窗体的一部分进行部署。此标头中的大多数(90%)函数正常工作。但是,GetMsg(...)会抛出C3861 Identifier not found错误...
Utils.h(片段):在底部声明了GetMsg
#pragma once
/*------------------------------------------------------------------------*
Includes:
*------------------------------------------------------------------------*/
using namespace std;
/*------------------------------------------------------------------------*
Constants:
*------------------------------------------------------------------------*/
#define GET_MSG_TIMEOUT 2
/*------------------------------------------------------------------------*
Typedefs, Structs, Enums:
*------------------------------------------------------------------------*/
typedef union
{
unsigned long ui32;
unsigned char ui8[4];
} UI32_UI8;
typedef union
{
unsigned short ui16;
unsigned char ui8[2];
} UI16_UI8;
typedef union
{
float f;
unsigned char ui8[4];
} F_UI8;
typedef struct
{
string sName;
string sVersion;
string sCompany;
string sCopyright;
} PRODUCT_INFORMATION;
/*------------------------------------------------------------------------*
Prototypes:
*------------------------------------------------------------------------*/
unsigned short SwapShort(unsigned short aShort);
float SwapFloat(float aFloat);
unsigned long SwapLong(unsigned long aLong);
unsigned int ReadLine(unsigned char *msgBuf, SerialPort^ Hdl, bool ReturnLF);
void __stdcall FillTheBuffer(char *buf, String sss, int length);
string __stdcall FillTheString(string sss, int length);
unsigned int __stdcall GetMsg(SerialPort^ Hdl, unsigned char *msgBuf);
Utils.cpp中的GetMsg定义:
//---------------------------------------------------------
unsigned int __stdcall GetMsg(SerialPort^ Hdl, unsigned char *msgBuf)
{
...
}
最后,在表单文件中使用GetMsg:
#include "Utils.h"
...
void MainForm::UploadButton_Click
(System::Object^ object, System::EventArgs^ e)
{
...
SwapShort(1); //Works fine, also declared in Utils.h
GetMsg(spCom, inBuf); //C3861 ERROR
...
}
spCom是在Windows窗体中包含,配置和打开的(SerialPort ^)。 inBuf是一个简单的字符数组(char *)来缓冲输入。我已经尝试重命名该函数,认为其他文件中可能存在无意的冲突/过载,但无济于事。
有什么建议吗?提前谢谢
答案 0 :(得分:0)
解决了问题 - 事实证明我需要在函数定义中更明确。将声明更改为
GetMsg(System::IO::Ports::SerialPort^ Hdl, unsigned char *msgBuf)
消除了C3861错误。似乎缺少声明中的特定命名空间传递了Intellisense,但使编译器感到困惑,导致它无法确定哪个原型与函数调用一起使用。