Nasıl yapılır: Yönetilen Koddan PInvoke Kullanarak Yerel DLL'leri Çağırma

Yönetilmeyen DLL'lerde uygulanan işlevler, Platform Çağırma (P/Invoke) işlevi kullanılarak yönetilen koddan çağrılabilir. DLL'nin kaynak kodu kullanılamıyorsa, birlikte çalışmak için tek seçenek P/Invoke'tır. Ancak, diğer .NET dillerinden farklı olarak, Visual C++ P/Invoke'a bir alternatif sağlar. Daha fazla bilgi için bkz . C++ Birlikte Çalışma Kullanma (Örtük PInvoke).

Örnek

Aşağıdaki kod örneği, ekranın geçerli çözünürlüğünü piksel cinsinden almak için Win32 GetSystemMetrics işlevini kullanır.

Bağımsız değişken ve dönüş değeri olarak yalnızca iç türleri kullanan işlevler için ek çalışma gerekmez. İşlev işaretçileri, diziler ve yapılar gibi diğer veri türleri, düzgün veri hazırlamayı sağlamak için ek öznitelikler gerektirir.

Gerekli olmasa da, bu örnekte gösterildiği gibi genel ad alanında mevcut olmaması için P/Invoke bildirimlerini bir değer sınıfının statik üyeleri yapmak iyi bir uygulamadır.

// pinvoke_basic.cpp
// compile with: /clr
using namespace System;
using namespace System::Runtime::InteropServices;

value class Win32 {
public:
   [DllImport("User32.dll")]
   static int GetSystemMetrics(int);

   enum class SystemMetricIndex {
      // Same values as those defined in winuser.h.
      SM_CXSCREEN = 0,
      SM_CYSCREEN = 1
   };
};

int main() {
   int hRes = Win32::GetSystemMetrics( safe_cast<int>(Win32::SystemMetricIndex::SM_CXSCREEN) );
   int vRes = Win32::GetSystemMetrics( safe_cast<int>(Win32::SystemMetricIndex::SM_CYSCREEN) );
   Console::WriteLine("screen resolution: {0},{1}", hRes, vRes);
}

Ayrıca bkz.

C++'ta Açık PInvoke Kullanma (DllImport Özniteliği)