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

时间:2014-01-03 18:29:33

标签: winapi visual-c++ c++-cli

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

有什么建议吗?提前谢谢

1 个答案:

答案 0 :(得分:0)

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

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

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