VC ++ WINAPI窗体:找不到标识符(C3861错误)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC ++ WINAPI窗体:找不到标识符(C3861错误)相关的知识,希望对你有一定的参考价值。

我正在研究从一些旧的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 *)来缓冲输入。我已经尝试重命名该函数,认为其他文件中可能存在无意的冲突/过载,但无济于事。

有什么建议?提前致谢

答案

解决了问题 - 事实证明我需要在函数定义中更明确。将声明更改为读取

GetMsg(System::IO::Ports::SerialPort^ Hdl, unsigned char *msgBuf)

消除了C3861错误。似乎缺少声明中的特定命名空间传递了Intellisense但使编译器感到困惑,导致它无法确定哪个原型与函数调用一起使用。

以上是关于VC ++ WINAPI窗体:找不到标识符(C3861错误)的主要内容,如果未能解决你的问题,请参考以下文章

VS2010,编译VC6的项目,报错: "exception": 找不到标识符,求大家帮着解决

将 WTL 更新到 WTL 10:'AtlCopyBitmap':找不到标识符

vs使用.sort 找不到标识符

vc6转vs2010错误

vc6转vs2010错误

vc6.0如何使用getwindowtext函数获取edit控件中的文本内容