«ТЕСТ» не поддерживается языком - PullRequest
2 голосов
/ 10 марта 2012

Когда я вызываю функцию C ++:

public ref class TEST_CLASS
{
    void TEST(void (*func)())
    {
        (*func)()
    }
};

в C #:

TEST_CLASS t = new TEST_CLASS();
t.TEST(f);

я получаю сообщение об ошибке:

'TEST' isне поддерживается языком

Что будет причиной этой ошибки?Как я могу это исправить?

1 Ответ

6 голосов
/ 10 марта 2012

Когда я вызываю функцию C ++:

Это не код C ++, вы написали класс C ++ / CLI.Обратите внимание на ключевое слово ref class .Вы объявили метод для получения указателя на C-функцию.Это хорошо в языке C ++ / CLI, позволяет смешивать нативные и управляемые конструкции кода, но не отлично подходит для языков, подобных C # или VB.NET.Они настаивают на том, чтобы вы использовали управляемую версию указателя функции, делегат .

. В платформе .NET уже есть тип делегата, который соответствует сигнатуре указателя на вашу функцию C, MethodInvoker.Но давайте предположим, что вы хотите расширить сигнатуру и добавить, скажем, свои собственные аргументы и тип возвращаемого значения:

public ref class TEST_CLASS
{
public:
    delegate void TEST_delegate();

    void TEST(TEST_delegate^ func)
    {
        func();
    }
};

Выбор этого имени немного обидный.

...