C++ 'da uygulanan oldukça büyük bir sistemim var. Sistem oldukça büyük bir API'ye, C++ DLL'lerine sahip. Bu DLL'ler, güzel bir C stili API'nin aksine C++ sınıflarını dışa aktarır. ve bunları yeni bir C# projesinden kullanmam gerekiyor. - Sadece C API'leri C++ API nasıl çağırılır C#
- P/çağır: Ben .NET bildiğim kadarıyla
yerli yazılım ile etkileşime üç yolu vardır
Anlayabildiğim şekilde, buna göre üç yaklaşımım var:
- Bir sargıyı C'ye yazmak ve P/Invoke ile çağırmak. Bu çok fazla iş gibi görünüyor.
- COM ile bir sarıcı yazma. nasıl yapılacağını bilmiyorum, ve delirmek kolay olmadıkça bana neyin benzediğini öğrenmek istemiyorum - ölmekte olan bir teknoloji.
- C++/CLI'de bir sarıcı yazma. En az iş gibi görünüyor, yine de çok.
Sorum:
ben bilmek istiyorum Öncelikle neden .NET bana sadece "olduğu gibi" C++ sınıfları kullanmasına izin vermiyor? Ben bir bellek yönetimi meselesi var. ve eğer varsa, finalistleri yazmaktan daha çok, ve IDisposable'ı uyguluyorum. Bildiğim kadarıyla C++ sınıfları sadece gerçekten şık yapılardır ve P/Invoke yapıları desteklediğinden ve yapıları ilk parametre olarak alan işlevlerinden dolayı, neden sınıflarını desteklemiyorsunuz?
İkincisi, gerçekten tembel olduğumu ve sıkıcı, sıkıcı, çalışacağını varsayarak, bu DLL'leri kullanmanın en iyi yolu ne olurdu? Bunları doğrudan C# olarak adlandırmak için bir olasılık en iyisi olacaktır. Değilse, sarmalayıcıları üretmek için otomatik bir aracı seviyorum. Ayrıca, DLL'ler değişebilir, muhtemelen, sadece biraz ama yine de, sarmalayıcıları elle yeniden yazmak için zorlanmaz.
gerçekten iyi yanıt için
, özellikle ilk bölümünde, veya iyi bir otomatik araç üzerinde, bir ödül ödül vereceğiz ...
,
1'e eski cevaba bakınız Daha fazla bilgi için SWIG
olduğunu. –
http://stackoverflow.com/questions/2120690/tool-for-creating-net-wrappers-for-a-com-dll –
C++/CLI'nin iyi olacağını düşünüyorum. Bununla birlikte, C++ ihracatı ile bunu tam olarak deneyimlemem. – chris