C # gibi bir .NET dilinden, muhtemelen bir kod kitaplığı dosyası (.dll) olarak derlenen C ++ kodunu çağırmak mümkün müdür?
Özellikle RakNet ağ kitaplığı gibi C ++ kodu.
C # gibi bir .NET dilinden, muhtemelen bir kod kitaplığı dosyası (.dll) olarak derlenen C ++ kodunu çağırmak mümkün müdür?
Özellikle RakNet ağ kitaplığı gibi C ++ kodu.
Yanıtlar:
C ++ 'yı çağırmanın kolay bir yolu, C ++ / CLI'de bir sarmalayıcı derlemesi oluşturmaktır. C ++ / CLI'de, yerel kod yazıyormuşsunuz gibi yönetilmeyen kodu çağırabilirsiniz, ancak C # 'dan C ++ / CLI kodunu C # ile yazılmış gibi çağırabilirsiniz. Dil, temelde "katil uygulaması" olarak mevcut kitaplıklarla birlikte çalışacak şekilde tasarlandı.
Örneğin - bunu / clr anahtarıyla derleyin
#include "NativeType.h"
public ref class ManagedType
{
NativeType* NativePtr;
public:
ManagedType() : NativePtr(new NativeType()) {}
~ManagedType() { delete NativePtr; }
void ManagedMethod()
{ NativePtr->NativeMethod(); }
};
Sonra C # içinde, ManagedType derlemenize bir başvuru ekleyin ve şu şekilde kullanın:
ManagedType mt = new ManagedType();
mt.ManagedMethod();
Daha açıklanmış bir örnek için bu blog gönderisine göz atın .
P / Invoke güzel bir teknolojidir ve hedef DLL dosyasını yüklemeyle ilgili sorunlar dışında oldukça iyi çalışır. İşleri yapmanın en iyi yolunun, yerel işlevlerden oluşan statik bir kitaplık oluşturmak ve bunu ona bağlı olan bir Yönetilen C ++ (veya C ++ / CLI) projesine bağlamak olduğunu bulduk.
Evet, buna P / Invoke denir .
Win32 API ile kullanmak için harika bir kaynak site:
Elbette. Bu makale , buna başlamak için yapabileceğiniz şeylerin güzel bir örneğidir.
Bunu Windows Mobile cihazlarımızda P / Invoke kullanarak C # üzerinden yapıyoruz .
Bunu yapmak için kullanılan teknolojiye P / Invoke denir ; konuyla ilgili makaleler arayabilirsiniz. C # 'dan C çağırmak için olduğuna dikkat edin, C ++' dan çok değil. Bu nedenle, C ++ kodunuzu DLL'nizin dışa aktardığı bir C sarmalayıcısına sarmanız gerekir.