2012-04-26 18 views
6

Próbuję utworzyć integrację między programem bazującym na Lisp innej firmy (nazwijmy to ABC) a programem C#, który sam napisałem (nazwijmy to DEF). Problem polega na tym, że ABC może wywoływać tylko zespoły utworzone w C lub Fortran. Więc zacząłem uczyć się C, i mam test "cześć świat" do pracy, gdzie ABC nazywa moje C dll i dostaje "cześć świat" w zamian. Próbowałem wywołać moje dll DEF z kodu C za pomocą jawnego ładowania i GetProcAddress. To działało, gdybym zadzwonił do innej biblioteki DLL, ale nie do biblioteki C#. Teraz zastanawiam się, czy muszę uczyć się C++ i wywołać C# od C++, aby utworzyć ten piękny łańcuch połączenia:Jak wywołać metody w C# dll z mojego kodu C?

ABC -> C -> C++ -> DEF (C#) -> C++ -> C -> ABC

Jeśli to jedyny sposób, czy ktoś może mi pomóc z przykładami itp.?

+1

Czy zarejestrowałeś swój plik C# dla interakcji COM? Zrobiłem to w przeszłości, jest to możliwe. – SouthShoreAK

+0

Nie zapomnij oznaczyć odpowiedzi na swoje pytanie, jeśli jest (zaznacz hak pod przyciskiem odpowiedzi na dole odpowiedzi). – sschrass

Odpowiedz

2

Użyj funkcji this project, aby wyeksportować funkcje języka C# jako rodzime punkty wejściowe.

+0

Naprawdę mam to do pracy, wielkie dzięki! – AndersJH

3

Podczas tworzenia zestawu .NET można ustawić pole wyboru, aby zespół zarejestrowany dla współdziałania COM. Umożliwi to uzyskanie dostępu do niego pod numerem z dowolnego języka, który może wywołać COM. (C może nie może być? Byłem przez długi czas odkąd dotknąłem C lub C++.)

Właściwości konfiguracyjne -> Strona budowy właściwości projektu. Poszukaj hasła "Register for COM Interop".

+0

To nie działało. C nadal nie może odnaleźć adresu procedury w bibliotece dll. – AndersJH

Powiązane problemy