Как я передал бы делегата C# функция Управляемому С++.Dll?

Это не важно . Конечно, нормально, что Вы просите начинать на поблочном тестировании, но я повторяю его, это не важно.

единица - что-то вроде:

  • метод вызывается тестом. В ООП этот метод имеет к, вызванному на экземпляр класса (кроме статических методов)
  • функция на процедурных языках.

, Но , "единица", функция или метод, может также вызвать другую "единицу" из приложения, которое аналогично осуществлено тестом. Таким образом, "единица" может охватить по нескольким функциям или даже нескольким классам.

"Тест более важен, чем единица" ( testivus). Хороший тест должен быть:

  • Автоматический - выполнение и диагностика
  • Быстрый - Вы будете выполнять их очень часто
  • Атомарный - тест должен протестировать только одну вещь
  • Изолированный - тесты не должны зависеть друг от друга
  • Повторяемый - результат должен быть детерминирован

5
задан David Basarab 14 August 2009 в 17:20
поделиться

1 ответ

Во избежание циклических ссылок вам потребуется как минимум 3 сборки.

Библиотека C #:

  namespace CSLibrary
  {
    public class CSClass
    {
      public delegate string ACSharpDelegate (string message);

      public string Hello (string message)
      {
        return string.Format("Hello {0}", message);
      }
    }
  }

Библиотека C ++ / CLI (ссылки CSLibrary):

using namespace System;

namespace CPPLibrary {

  public ref class CPPClass
  {
  public:
    String^ UseDelegate( CSLibrary::CSClass::ACSharpDelegate^ dlg )
    {
      String^ dlgReturn = dlg("World");
      return String::Format("{0} !", dlgReturn);
    }
  };
}

Программа C # (ссылки CSLibrary и CPPLibrary):

namespace ConsoleApplication
{
  class Program
  {
    static void Main (string [] args)
    {
      CSLibrary.CSClass a = new CSLibrary.CSClass ();
      CSLibrary.CSClass.ACSharpDelegate dlg = new CSLibrary.CSClass.ACSharpDelegate (a.Hello);

      CPPLibrary.CPPClass b = new CPPLibrary.CPPClass ();
      String result = b.UseDelegate (dlg);

      Console.WriteLine (result);
      Console.Read ();
    }
  }
}
6
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: