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对象的指针,用它调用你的非静态对象吧。
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();}}