首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC++进行CLR编程,说null是“未声明的标识符”解决方法

2012-03-19 
VC++进行CLR编程,说null是“未声明的标识符”问题1:VC++进行CLR编程,说null是“未声明的标识符”,请高手救命,

VC++进行CLR编程,说null是“未声明的标识符”
问题1:
VC++进行CLR编程,说null是“未声明的标识符”,请高手救命,应该怎么解决啊?
问题2:
有一行代码:
AsyncCallback^ beginConnectCallBack = gcnew AsyncCallback(&P2PMultiChat::P2PSock::ConnectCallBack);
另外有ConnectCallBack的声明:
namespace
{
  public ref class P2PSock
  {
  private:
  Void ConnectCallBack(IAsyncResult^ ar);
  }
}
VS2008给出的错误是:
error C3352: “void P2PMultiChat::P2PSock::ConnectCallBack(System::IAsyncResult ^)”: 指定的函数与委托类型“void (System::IAsyncResult ^)”不匹配
可是我怎么看就是怎么匹配啊!我查了一些资料,MSDN上给的c#和VB的示例代码都用了static关键字来描述ConnectCallBack,但是我要使用非静态的ConnectCallBack啊,请高手救命!

[解决办法]
可能缺少头文件吧
[解决办法]
是不是null写成NULL就好了;要不然就是没有定义
AsyncCallback^ beginConnectCallBack = gcnew AsyncCallback
错误提示,说是gcnew AsyncCallback返回值是 void,你用AsyncCallback^ beginConnectCallBack=,是错误的;
做个转换(AsyncCallback^)gcnew AsyncCallback
[解决办法]
static,必须的!



[解决办法]
回调函数必须是:
static静态
全局函数
[解决办法]
据俺所知道用IAsyncResult*可以得到delegate对象的指针,用它调用你的非静态对象吧。

C/C++ code
class MyDelegate{static void MyCallback( IAsyncResult^ ar ){      // Obtains return value from the delegate call using EndInvoke.   AsyncResult^ aResult = dynamic_cast<AsyncResult^>(ar);   MyDelegate^ temp = static_cast<MyDelegate^>(aResult->AsyncDelegate);   temp->YourActualFuncToCall();}} 

热点排行