Czy istnieje sposób wywołania C# dll z niezarządzanej aplikacji C++ bez użycia COM?Wywołanie C# dll z niezarządzanej aplikacji C++ bez COM
Odpowiedz
Można to zrobić przy użyciu Reverse P/Invoke
- przykład i dyskusji here.
Dziękuję. To interesujące. –
Jedyną opcją jest użycie C++ .net lub utworzenie C++. Net wrapper, który eksportuje to, czego potrzebujesz.
W rzeczywistości możliwe jest dezasemblowanie, modyfikacja IL i ponowne złożenie go za pomocą wyeksportowanych funkcji. Zmywałem to kilka lat temu i stworzyłem aplikację, która zdemontował bibliotekę dll, dostarczył listę funkcji, które potencjalnie mogłyby zostać wyeksportowane - pozwalając użytkownikowi wybrać je, a następnie ponownie napisać IL i ponownie złożyć wszystko. Następnie mógłbym wywołać bezpośrednio do biblioteki dll z niezarządzanego kodu ... lub p-invoke do biblioteki dll z kodu zarządzanego (niezbyt praktyczne, ale interesujące).
Oczywiście istnieje powód, dla którego nie jest to obsługiwane w samych językach .net (nawet jeśli jest obsługiwane w MSIL). I nie byłoby to wykorzystać w produkcji:
http://www.csharphelp.com/2007/03/exporting-managed-code-as-unmanaged/
Jest obsługiwany w C++/CLI, automatycznie tworzy thunk, który załaduje CLR, gdy funkcja __declspec (dllexport) będzie statyczną funkcją C++/CLI. To jest oczywiście Wielka Sztuczka, nie można uruchomić zarządzanego kodu bez ładowania CLR. –
@Hans Gdy dodasz eksport do swojej IL, ILASM zrobi wszystko, co jest wymagane, aby twój zestaw był używany jak natywny. –
mogę być nieco późno, ale sprawdź this zewnątrz.
Za pomocą tego małego zadania msbuild można utworzyć bibliotekę C#, którą można wywołać tak, jakby była natywną biblioteką DLL. (np. wypisz wtyczki dla aplikacji, które wymagają, aby były rodzimymi bibliotekami dll)
Aha i nie zapomnij użyć project template, który ustawi wszystko dla ciebie.
- 1. Wywołanie C# z natywnego C++, bez/clr lub COM?
- 2. Nie można zdebugować niezarządzanej biblioteki DLL z C#
- 3. Debuguj C# dll z rozwiązania C++ przez COM
- 4. Wywołanie biblioteki DLL Delphi z aplikacji C# .NET
- 5. Powiesić w aplikacji COM z wtyczką C#
- 6. Wywołanie biblioteki dll z C++, C# i ruby
- 7. Wywołanie zestawu x64 przez COM z aplikacji 32-bitowej
- 8. Przenoszenie (niezarządzanego) C++ do C# vs używanie C++ jako DLL w aplikacji C#
- 9. debugowanie bezpłatnej rejestracji COM (C++)
- 10. Wywołanie C# DLL z Inno Setup z wywołaniem zwrotnym
- 11. Jak używać COM dll w moim programie C++
- 12. Generowanie widocznego zestawu COM z zarządzanego C++ (C++/CLI)
- 13. Wywołanie C/C++ z Pythona?
- 14. Jak wywołać funkcję DLL C++ z C#
- 15. Jak sprawdzić, czy dll COM jest zarejestrowany w C#
- 16. Możliwe wywołanie zarządzanej biblioteki DLL z niezarządzanego C++?
- 17. Wywołanie funkcji delphi dll z języka C# w tablicy bajtów
- 18. Jak zarejestrować DLL DLL napisane w języku C# z Regsvr32?
- 19. Wywołanie funkcji DLL z Python
- 20. C# aktualizacja DLL bez ponownej kompilacji projektu
- 21. Utwórz obiekt COM z pliku bez regsvr32
- 22. Wywołanie Pythona z Objective-C
- 23. Obsługa zdarzeń C# COM w C++
- 24. Używanie zarządzanego dll C++ z C#
- 25. Release SAFEARRAY z C++ DLL i C#
- 26. Wywoływanie C# dll w vbscript
- 27. Wywołanie Py_Finalize() z C
- 28. json wywołanie z C#
- 29. Wywołanie Swift z C
- 30. Wywołanie Pythona z C++
Zawsze można [osadzić Mono] (http://www.mono-project.com/Embedding_Mono) ... – cdhowie
można to zrobić za pomocą biblioteki DLL trybu mieszanego. –
możliwy duplikat [Wywołanie kodu C# z C++] (http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c) – cdiggins