Ошибка компиляции в случае удаления в C # с VS 2003 - PullRequest
0 голосов
/ 25 июля 2011

Привет! Я пытаюсь перезвонить своему управляемому обратному вызову из неуправляемого кода через P / Invoke, я использую VS 2003 и не могу выполнить следующий код (в C #).Тот же код, если я копирую вставить в VS 2005, он компилируется без проблем и выполняется правильно.

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.Спасибо за любые предложения.

1 Ответ

2 голосов
/ 25 июля 2011

IIRC, должно работать следующее:

SampleDelegate(new MyDelegate(this.Target1));

Автоматическое создание делегатов было одной из новых функций в C # 2.0, впервые реализованной в VS2005.

Примечание: я непоблизости нет работающего VS2003, поэтому не можете это проверить.

В качестве отступления: если вы добавляете парантез, например, SampleDelegate(this.Target1());, вы звоните Target1 и пытаетесь передать результат в SampleDelegate.Но возвращенный результат не является делегатом, следовательно, ошибка компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...