Autor Wątek: Import DLL napisanej w C#  (Przeczytany 3192 razy)

Offline Ayanami

  • Użytkownik

# Luty 09, 2010, 15:26:07
Mam napisany interfejs graficzny w C# w postaci DLL. Chcę zaimportować odpowiednie funkcje w C++.
Znalazłem w sieci informacje, żeby w ogóle to było możliwe trzeba wykonać kilka karkołomnych kroków:

1. Skompilować DLL.
2. Disasemblować ją ildasm.exe.
3. Edytować plik *.il (dodać w sekcji funkcji eksportowanej):
.vtentry 1:1
.export [1] as NazwaEksportu
Jednocześnie samemu dbając o numerację kolejnych eksportów.
4. Ponownie skleić DLL do kupy ilasm.exe.

Naprawdę nie istnieje żadna normalna metoda przygotowania DLL napisanej w C#, by można było ją użyć w C++?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Dab

  • Redaktor
    • blog

# Luty 09, 2010, 15:40:21
Możesz użyć C++/CLI

Offline Ayanami

  • Użytkownik

# Luty 09, 2010, 15:49:34
Jasne, zawsze sobie mogę napisać cały interfejs od nowa w czystym WinAPI. Ale raczej nie o to mi chodzi.

Offline Will

  • Użytkownik

# Luty 09, 2010, 15:51:56
A kto pisał, że w czystym winapi? Piszesz wrapper w c++/CLI i po problemie.


Offline Dab

  • Redaktor
    • blog

# Luty 09, 2010, 16:26:20
Jasne, zawsze sobie mogę napisać cały interfejs od nowa w czystym WinAPI. Ale raczej nie o to mi chodzi.
He? Pogooglaj czym jest C++/CLI.

Offline Ayanami

  • Użytkownik

# Luty 09, 2010, 16:35:44
Oj. Mnie po prostu chodzi o to, żebym najnormalniej w świecie mógł użyć tej C# DLL tak samo jak każdej innej napisanej w C++. Widzę, że jednak zbyt wysokie wymagania mam.

Offline Nephrite

  • Użytkownik

# Luty 09, 2010, 17:23:07
A kliknąłeś w ogóle w ten link, który podałem?

Offline Dab

  • Redaktor
    • blog

# Luty 09, 2010, 17:37:07
Oj. Mnie po prostu chodzi o to, żebym najnormalniej w świecie mógł użyć tej C# DLL tak samo jak każdej innej napisanej w C++. Widzę, że jednak zbyt wysokie wymagania mam.
"Normalnie" tzn przez LoadLibrary + GetProcAddress? Nie przejdzie, DLL C# nie jest w formacie PE.
Poza tym co byś przekazywał do funkcji? O ile w .NET jest automatyczny system zmiany typów (String -> const char* itd) to w drugą stronę już nie bardzo.
Możesz faktycznie użyć COM ale pod względem wygody użycia nie ma porównania z C++/CLI.

Offline Ayanami

  • Użytkownik

# Luty 09, 2010, 17:54:05
Aano i właśnie chcę, żeby była w formacie PE. I dzięki ildasm.exe i ilasm.exe dostaję taką DLL. Wszystko rozchodzi się o to, by na etapie budowania projektu otrzymać gotową do użytku bibliotekę.

Offline Aithne

  • Użytkownik

# Luty 09, 2010, 20:23:32
DLL C# nie jest w formacie PE.
Jest. To jest zwykły PE, tylko trzyma kupę metadanych i kod zarządzany zamiast natywnego.

Offline nilphilus

  • Użytkownik
    • wordpress

# Luty 09, 2010, 22:04:29
Oj. Mnie po prostu chodzi o to, żebym najnormalniej w świecie mógł użyć tej C# DLL tak samo jak każdej innej napisanej w C++. Widzę, że jednak zbyt wysokie wymagania mam.

Nie wiem jakim cudem za taki komentarz uzyskałeś jeszcze jakiekolwiek odpowiedzi. @Nephrite: coś czuje że nie kliknął.