Coba jelasin Contoh dari Layanan Pemanggilan Platform dong

Contoh sederhana pertama ini menunjukkan bagaimana cara mendapatkan versi dari DLL tertentu:

Tanda tangan fungsi DllGetVersion di API Windows:HRESULT DllGetVersion

)Kode C# P/Invoke code untuk memanggil fungsi DllGetVersion:[StructLayout(LayoutKind.Sequential)]

static extern int DllGetVersion(ref DLLVERSIONINFO pdvi);Contoh kedua ini menunjukkan bagaimana cara mengekstrak ikon di file:

Tanda tangan fungsiExtractIcon di API Windows:HICON ExtractIcon

);Kode C# P/Invoke untuk memanggil fungsi ExtractIcon:[DllImport("shell32.dll")]

uint nIconIndex);Contoh rumit berikut ini menunjukkan bagaimana cara membagi peristiwa di antara dua proses di platform Windows:

Tanda tangan fungsi CreateEvent : HANDLE CreateEvent(

);Kode C# P/Invoke untuk memanggil fungsi CreateEvent:[DllImport("kernel32.dll", SetLastError=true)]

} PAIR, *PPAIR;// Compiled with /clr; use of #pragma managed/unmanaged can lead to double thunking;

// avoid by using a stand-alone .cpp with .h includes.

// This would be located in a .h file.

inline CLR_PAIR^ marshal_as<CLR_PAIR^, PAIR> (const PAIR&Src) {    // Note use of de/referencing. It must match your use.

CLR_PAIR^ Dest = gcnew CLR_PAIR;

// Using marshal_as. It makes sense for large or frequently used types.

return(mgd_pair1); // Return to C#

Ada beberapa alat yang dirancang untuk membantu produksi tanda tangan P/Invoke.

Menulis aplikasi utilitas yang akan mengimpor file header C++ dan file DLL asli dan menghasilkan rakitan antarmuka secara otomatis ternyata agak sulit. Masalah utama ketika menghasilkan pengimpor/pengekspor untuk tanda tangan P/Invoke tersebut adalah ketidakjelasan beberapa jenis parameter panggilan fungsi C++.

Brad Adams menyebut ini: Masalah P/Invoke.

Masalahnya berada di fungsi C++ seperti berikut ini: __declspec(dllexport) void MyFunction(char *params);Jenis apa yang harus kita gunakan untuk parameter params di tanda tangan P/Invoke kita? Ini bisa jadi string C++ yang dihentikan null, atau array  atau mungkin merupakan parameter output . Jadi haruskah kita menggunakan , ,  atau ?

Terlepas dari masalah ini, ada beberapa alat yang tersedia untuk membuat produksi tanda tangan P/Invoke menjadi lebih sederhana.

Salah satu alat yang tercantum di bawah ini, xInterop C++ .NET Bridge  telah memecahkan masalah ini dengan menerapkan berbagai pengganti dari metode C++ yang sama di dunia .NET, pengembang dapat kemudian memilih pengganti yang tepat untuk melakukan panggilan.