2010-03-22 20 views
19

Tecrübeli bir .Net programcıyım ama hayatımda bir C/C++ programı derlemedim. Şimdi bu C-dll, üstbilgileri ve belgeleri (Win API'den değil, üçüncü taraf) var, ondan yaklaşık on yöntem aramam gerekiyor.P/Invoke kodu oluşturmanın en kolay yolu?

Platform Invoke'u kullanmayı düşünüyordum.

ve muhtemelen

Pinvoker Interop'un yardımcısı ve Sihirbazı biraz daha farklı bir yaklaşım var gibi görünüyor. Swig Bu soruyu burada sormadığınızı kontrol ederken buldum.

Bu araçların artıları ve eksileri nelerdir?

Ne iyi = en kolay ve bana C/C hakkında çok şey bilmiyorum düşünülürse P/Invoke kodu üretmek için en güvenli yol olacaktır ++?

+0

ayna codeplex aşağı: https://drive.google.com/file/d/0B_OGphRNB0qPcWU1QVFKLS1NeWs/view?usp=sharing –

cevap

4

bir birlikte örneğin http://dotnetperls.com/dllimport-interop bakın ve daha fazla bilgi için bu MSDN article. Bu şeyler için İncil, Adam Nathan'sbook.

Temel olarak, aramak istediğiniz DLL'deki işlevleri tanımlamanız gerekir. Bunların dış dünyaya ulaşabilmeleri için extern ile işaretlenmesi gerekir. Zor olan bir sonraki adım, fonksiyon için bir DllImport yazmaktadır. Bu yönetilen ve yönetilmeyen dünyalar arasında harita gerekiyor. Karmaşık veri yapılarını C dll'den yönetilen koda dönüştürmek için nasıl çalışmanız gerekecek.

Sen DLL COM arayüzü herhangi bir tür olup olmadığını görmek için kontrol edilmelidir. İlk önce P/Invoke kullanmanız gerektiğinden emin olun.

yudum scripting dilleri kullanım için C/C++ kodu sarmak için ilk oldu. Bir arayüz açıklamasından C# kodu üretir (bkz. tutorial). P/Invoke bir seçenek ise C# kullanarak bunu tavsiye etmem. Onlar 2 char * alırsak yani ve bir int dönmek - fonksiyonların imzalar basit eğer

+0

Hayır, COM arayüzü yok. Yerel bir C-dll çağırmanız gerekiyor. – Ope

2

o zaman kurulum için 10 dakika sürer. Onun onlar alır o kadar karışık olsun sadece bir kez dağınık

pinvoke'tur üzerinde İncil Adam Nathans - .NET and COM: The Complete Interoperability Guide

Ve ben diğer poster ile - yudum doğru şey değildir

durumda P/çağır Interop'un Yardımcısı için
+0

Arayüzler basit değildir: karmaşık giriş ve çıkış yapıları. Ya da süper-karmaşık değil, her çağrıda 3-6 params, bazıları da birkaç parametreli yapılar. Bu yüzden jenerasyondaki yardımı gerçekten çok isterim. – Ope

+1

İşlev imzalarını buradan gönderir misiniz? Onları bir dereceye kadar engelleyebilirsin. –

+0

Bunu kontrol etmem gerek. Ancak imzalar (+ ilgili yapılar) yaklaşık 100 satırdır. Bu nesil araçların bir şekilde temel olarak iyi olmadıklarını mı söylüyorsunuz (eğer öyleyse neden?). Ya da neden bu araçları kullanmak yerine elle satır-by-line ve parametre-parametre ile uğraşıyorum? – Ope

İlgili konular