Wywoływanie kodu C# Z C++

Muszę być w stanie wywołać dowolne funkcje C# z C++. http://www.infoq.com/articles/in-process-java-net-integration sugeruje użycie ICLRRuntimeHost:: ExecuteInDefaultAppDomain (), ale pozwala mi to tylko na wywołanie metod o takim formacie: int method(string arg)

Jaki jest najlepszy sposób na wywołanie dowolnych funkcji C#?

Author: Deduplicator, 2009-04-22

6 answers

Skompiluj kod C++ za pomocą znacznika / clr . Dzięki temu możesz wywołać dowolny kod. NET ze względną łatwością.

Na przykład:

#include <tchar.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    System::DateTime now = System::DateTime::Now;
    printf("%d:%d:%d\n", now.Hour, now.Minute, now.Second);

    return 0;
}

Czy to się liczy jako " C++"? Cóż, to oczywiście nie jest standardowy C++ ...

 22
Author: Ðаn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-02 12:50:33

Istnieje kilka sposobów, aby aplikacja C++ wywoływała funkcje w C# DLL.

  1. Używanie C++ / CLI jako pośredniego DLL
  2. Odwróć P / Wywołaj
  3. Korzystanie z COM
  4. Using CLR Hosting (ICLRRuntimeHost::ExecuteInDefaultAppDomain())
  5. Komunikacja Interprocess (IPC)
 39
Author: cdiggins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:52

Jeśli nie obchodzi cię, czy twój program C++ (lub jego część) zostanie skompilowany z /clr, możesz użyć C++/CLI, aby po prostu wywołać dowolny kod.NET (o ile dodasz do niego odniesienie). Wypróbuj ten artykuł .

EDIT: Oto fajny tutorial

Inną drogą jest to, aby Twój kod C# był wyświetlany jako COM.

 6
Author: Filip Frącz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-22 21:58:07

Najprostszym sposobem jest użycie COM interop.

 3
Author: laktak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-22 18:41:05

Możesz użyć owijarki COM wokół kodu C# skompilowanego do biblioteki DLL.

 1
Author: Dan Vinton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-22 19:23:45

Jako alternatywne podejście można użyć Lua do tworzenia instancji obiektów CLR, wykonywania i zwracania wyników.

 1
Author: David Robbins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-22 21:18:38