我是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”,所以我做了。
答案 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;
}