2010-04-14 32 views
35

Ben bir C++ projesi var. C++ 'da tam bir SIFIR olduğumu itiraf ediyorum. Ama hala bir C++. Net sarmalayıcı yazmam gerekiyor, bu yüzden onu kullanarak yönetilmeyen bir C++ kütüphanesi ile çalışabilirim. Yani sahip olduğum: 1) yönetilmeyen projenin başlık dosyaları. 2) yönetilmeyen proje en kütüphaneleri (.dll en ve .lib en) 3) benim C# uygulamasıBasit C++ ağ oluşturucu. Adım adım

için sarıcı olarak kullanmayı planlıyor boş C++. NET projesi nasıl başlayabilirim? Yönetilmeyen bir kütüphaneye nasıl referans yapılacağını bile bilmiyorum.

S.O.S.

+13

+1 tam olarak aynı durumda olduğum için çaresiz ve clueless için :) –

cevap

35

http://www.codeproject.com/KB/mcpp/quickcppcli.aspx#A8

bu genel yöndür. C++/CLI Sınıf Kitaplığı projesi oluşturmalısınız, ona .NET sınıfı ekleyin (bu örnekte StudentWrapper), yönetilen sınıf üyesi olarak yönetilmeyen sınıf örneği oluşturun ve her yönetilmeyen sınıf işlevini sarın. Yönetilmeyen kütüphane, referans olarak değil, bağlayıcı bağımlılıkları listesi kullanılarak C++/CLI projesine eklenir. Proje - Özellikler - Bağlayıcı Ek Bağımlılıklar açın ve orada .lib adı ekleyin.

Not: C++/CLI sarıcısından bahsediyoruz, PInvoke yok! PInvoke, sınıflar değil, dışa aktarılan işlevleri (API) çağırmak için kullanılır.

+5

C++/CLI aslında kapalı P/Invoke, bu yüzden hala P/Invoke. http://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx, C++ sınıflarını da çağırmak için P/Invoke kullanabilirsiniz, sadece fazladan iş yapmalısınız. – xInterop

+0

Burada [codeproject (link)] ile ilgili bir başka harika makale (http://www.codeproject.com/Articles/651516/Exposing-native-to-managed-Cplusplus-CLI-vs-P-Invo). Hem P/Invoke hem de C++/CLI açıklar. Shmuel Zang. –

8

Yönetilmeyen DLL'nizle konuşmak için .NET'ten p/invoke kullanmanız gerekir.

Temelde, yönetilmeyen DLL'nizde aramak istediğiniz her işlev için bir işlev üstbilgisi oluşturun ve .NET'in hangi DLL'de çalıştığını söyleyin, ardından bu işlevi yalnızca .NET sarmalayıcınızdaki gibi arayın.

Yönetilmeyen DLL'nizdeki işlevlerin işlev tanımını ve doğru veri türlerini bildiğiniz sürece, C++ bilgisine bile ihtiyacınız yoktur.

+1

Bağlantı şu an itibariyle bozuk görünüyor gibi görünüyor – qbolec

İlgili konular