Porady: wywoływanie natywnych bibliotek DLL z kodu zarządzanego za pomocą funkcji PInvoke
Funkcje, które są implementowane w niezarządzanych bibliotek DLL może być wywołana z kod zarządzany przy użyciu funkcji wywołanie platformy (P i Invoke).Jeśli kod źródłowy dla biblioteki DLL nie jest dostępny, P/Invoke jest jedyną opcją dla współdziałania.Jednak w przeciwieństwie do innych języków .NET, Visual C++ stanowi alternatywę dla P i Invoke.Aby uzyskać dodatkowe informacje, zobacz Korzystanie z międzyoperacyjności języka C++ (niejawna funkcja PInvoke).
Przykład
W poniższym przykładzie kodu użyto Win32 GetSystemMetrics funkcji do pobierania bieżącej rozdzielczości ekranu w pikselach.
Funkcje, które służy tylko typów wewnętrznych jako argumenty i zwracać wartości wymagana jest bez dodatkowej pracy.Inne typy danych, takie jak wskaźników funkcji, tablic i struktury, wymagają dodatkowych atrybutów do zapewnienia właściwego dane organizacyjne.
Chociaż nie jest to wymagane, jest dobrą praktyką, aby P i Invoke deklaracje statyczne elementy członkowskie klasy wartość tak, że nie istnieją one w globalnej przestrzeni nazw, jak pokazano w poniższym przykładzie.
// 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);
}
Zobacz też
Inne zasoby
Używanie jawnej funkcji PInvoke w języku C++ (atrybut DllImport)