Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A nem felügyelt DLL-ekben implementált függvények a platformhívási (P/Invoke) funkcióval meghívhatók felügyelt kódból. Ha a DLL forráskódja nem érhető el, a P/Invoke az egyetlen lehetőség az együttműködésre. Más .NET-nyelvektől eltérően azonban a Visual C++ alternatívát kínál a P/Invoke helyett. További információ: C++ Interop (Implicit PInvoke) használata.
példa
Az alábbi példakód a Win32 GetSystemMetrics függvénnyel kéri le a képernyő aktuális felbontását képpontban.
Az olyan függvények esetében, amelyek csak belső típusokat használnak argumentumként és visszaadják az értékeket, nincs szükség további munkára. Más adattípusokhoz, például függvénymutatókhoz, tömbökhöz és struktúrákhoz további attribútumok szükségesek a megfelelő adatmegbíróság biztosításához.
Bár ez nem kötelező, célszerű a P/Invoke deklarációkat statikussá tenni egy értékosztályban, hogy azok ne legyenek a globális névtérben, ahogyan az ebben a példában is látható.
// 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);
}
Lásd még
Explicit PInvoke használata c++ nyelven (DllImport attribútum)