Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Contoh di bawah ini berasal dari aplikasi 'Hello World' di direktori RPC\Hello dari Platform Software Development Kit (SDK). Sisi server aplikasi terdistribusi menginformasikan sistem bahwa layanannya tersedia. Kemudian menunggu permintaan klien. Pengkompilasi MIDL harus digunakan dengan contoh di bawah ini.
Bergantung pada ukuran aplikasi dan preferensi pengkodian, Anda dapat memilih untuk menerapkan prosedur jarak jauh dalam satu atau beberapa file terpisah. Dalam program tutorial ini, file sumber Hellos.c berisi rutinitas server utama. File Hellop.c berisi prosedur jarak jauh.
Manfaat mengatur prosedur jarak jauh dalam file terpisah adalah bahwa prosedur dapat ditautkan dengan program mandiri untuk men-debug kode sebelum dikonversi ke aplikasi terdistribusi. Setelah prosedur berfungsi dalam program mandiri, Anda dapat mengkompilasi dan menautkan file sumber yang berisi prosedur jarak jauh dengan aplikasi server. Seperti halnya file sumber aplikasi klien, file sumber aplikasi server harus menyertakan file header Hello.h.
Server memanggil fungsi run-time RPC RpcServerUseProtseqEp dan RpcServerRegisterIf untuk membuat informasi pengikatan tersedia untuk klien. Contoh program ini meneruskan handle nama antarmuka ke RpcServerRegisterIf. Parameter lain diatur ke NULL. Server kemudian memanggil fungsiRpcServerListen untuk menunjukkan bahwa server sedang menunggu permintaan klien.
Aplikasi server juga harus menyertakan dua fungsi manajemen memori yang dipanggil stub server: midl_user_allocate dan midl_user_free. Fungsi-fungsi ini mengalokasikan dan membebaskan memori di server ketika prosedur jarak jauh meneruskan parameter ke server. Dalam contoh program ini, midl_user_allocate dan midl_user_free hanyalah pembungkus untuk fungsi pustaka C malloc dan free. (Perhatikan bahwa, dalam deklarasi awal yang dihasilkan oleh kompilator MIDL, "MIDL" menggunakan huruf besar. File header Rpcndr.h mendefinisikan midl_user_free dan midl_user_allocate sebagai MIDL_user_free dan MIDL_user_allocate, masing-masing.)
/* file: hellos.c */
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "hello.h"
#include <windows.h>
#pragma comment(lib, "Rpcrt4.lib")
int main()
{
RPC_STATUS status;
unsigned short* pszProtocolSequence = (unsigned short*)L"ncacn_np";
unsigned short* pszSecurity = NULL;
unsigned short* pszEndpoint = (unsigned short*)L"\\pipe\\hello";
unsigned int cMinCalls = 1;
unsigned int fDontWait = FALSE;
status = RpcServerUseProtseqEpW(pszProtocolSequence,
RPC_C_LISTEN_MAX_CALLS_DEFAULT,
pszEndpoint,
pszSecurity);
if (status) exit(status);
status = RpcServerRegisterIf(hello_v1_0_s_ifspec,
NULL,
NULL);
if (status) exit(status);
status = RpcServerListen(cMinCalls,
RPC_C_LISTEN_MAX_CALLS_DEFAULT,
fDontWait);
if (status) exit(status);
}
void HelloProc(unsigned char * pszString)
{
printf("%s\n", pszString);
}
/******************************************************/
/* MIDL allocate and free */
/******************************************************/
void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
{
return(malloc(len));
}
void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
{
free(ptr);
}