编译错误wrt deleagates在C#中,使用VS 2003

编译错误wrt deleagates在C#中,使用VS 2003,c#,interop,C#,Interop,您好,我正在尝试调用我的托管回调,从非托管代码到反向p/Invoke,我使用的是VS 2003,我无法编译以下代码(在C中)。同样的代码,如果我复制粘贴到VS2005它编译没有任何问题,并正确执行 public delegate void MyDelegate(); [DllImport("rtxivsys.dll", CallingConvention=CallingConvention.StdCall)] static internal extern void SampleDelegate(

您好,我正在尝试调用我的托管回调,从非托管代码到反向p/Invoke,我使用的是VS 2003,我无法编译以下代码(在C中)。同样的代码,如果我复制粘贴到VS2005它编译没有任何问题,并正确执行

public delegate void MyDelegate();
[DllImport("rtxivsys.dll", CallingConvention=CallingConvention.StdCall)]
static internal extern void SampleDelegate(MyDelegate myDelegate);

public class Myclass
{
   void callthedelegate()
    {
        SampleDelegate(this.Target1);//Compilation error here.
    }
    void Target1()
    {
        //some code here , i want this to be called by the unmanaged code 
}
}
如果我没有给Target1加括号,它会给我编译错误,即“Target1引用时没有括号”,如果我给括号,它会说参数不能转换为MyDelegate。 我不确定是什么让它在VS2005中起作用。
感谢您的建议。

IIRC,以下建议应该有效:

SampleDelegate(new MyDelegate(this.Target1));
委托的自动创建是C#2.0中的一个新特性,最早是在VS2005中实现的

注意:我附近没有工作的VS2003,所以无法测试


顺便说一句:如果您添加了偏执,比如
SampleDelegate(this.Target1())
您正在调用
Target1
,并试图将结果提供给
SampleDelegate
。但是返回的结果不是委托,因此出现编译错误。

Hi@Sjoerd,谢谢,它对我有用。我对迅速的答复表示赞赏。