Могу ли я экспортировать интерфейс C ++ с методами C-Style в dll C # - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь избежать COM. Я разрабатываю смесь элементов управления C # и C ++ на C ++ exe.

Один метод, который я придумал, - это PInvoking моего C ++ exe из C # и отправка оконных сообщений в C # windows. Однако количество методов, которые я вызываю в базовом классе элементов управления, слишком велико, чтобы оправдать сообщения Windows.

Итак, если можно экспортировать весь интерфейс C # в C ++ exe, это было бы намного проще.

Я хочу избежать COM, потому что мне, возможно, придется поддерживать Windows 2000, и выполнение COM без использования манифеста было бы проблемой развертывания для пакета программного обеспечения, который в настоящее время не устанавливает много в реестре.

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Вы можете написать оболочку C для каждого из ваших элементов управления C ++ и PInvoke из C #.

Например, этот класс C ++:

class Example
{
  public:
  int MyMethod(int param);
}

и во внешнем блоке "C"в вашем C ++ EXE:

void * CreateExample() { return new Example(); }
int Example_MyMethod(void * handle, int param) { reinterpret_cast<Example*>(handle)->MyMethod(param)); }

и в C #:

public class Example
{
 private IntPtr handle;

 public Example()
 {
   handle = _CreateExample();
 }

 public int MyMethod(int param)
 {
    return _MyMethod(param);
 }

 [DllImport("yourdll.exe")]
 private static extern IntPtr _CreateExample();

 [DllImport("yourdll.exe")]
 private static extern int _MyMethod(IntPtr handle, int param);
}
0 голосов
/ 24 июня 2011

Я использую C ++ / CLI с VS 2010, чтобы сделать это.Вы можете предоставить интерфейс DLL C, который можно использовать обычным способом, реализация просто перенаправит данные из этого интерфейса в вашу сборку C #.

Смежный вопрос, я думаю Вызов C # из C ++, Reverse P/ Invoke, библиотеки смешанного режима и C ++ / CLI

...