Visual C ++错误“无法将参数1从'HANDLE'转换为'HANDLE&'”

时间:2014-02-05 09:30:15

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

我是visual c ++的新手,我在使用一些提供的API(.lib)进行开发时遇到了问题。

这是我的代码:

头文件中的

ref class RFID{
public:
   int connect(char* p);
private:
   HANDLE port;
}

在cpp文件中

#include "stdafx.h"
#include "RFID.h"
int RFID::connect(char* p){
   return RmuOpenAndConnect(port,p,0);
}

错误行是: error C2664: 'RmuOpenAndConnect' : cannot convert parameter 1 from 'HANDLE' to 'HANDLE &'

由于我是visual c ++的新手,我不知道如何解决这个错误,似乎参数不仅仅是“HANDLE”的地址,所以我不知道如何软化它。

感谢您的帮助。

编辑: 很抱歉,我在评论中添加了详细信息。 在头文件中,RmuOpenAndConnect定义如下:

int WINAPI RmuOpenAndConnect (HANDLE &hCom, char* cPort, UCHAR flagCrc); 

因为我想在我的程序中使用Thread(http://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart.aspx),看起来这个类应该是一个“ref class”,所以我做了。

1 个答案:

答案 0 :(得分:1)

这是因为HANDLE port是托管类的成员,托管类是垃圾回收的主题。无法使用对托管类成员的引用,因为类实例可以更改其地址。您可以使用局部变量来解决此问题:

int RFID::connect(char* p){
   HANGLE h = port;
   int n = RmuOpenAndConnect(h,p,0);
   port = h;    // in the case RmuOpenAndConnect changed the handle
   return n;
}