5.8.1 サービス関数の宣言

C++コンパイラでサービス関数を宣言する場合、extern “C”を使用して、“C”リンクを持つサービス関数を宣言しなければなりません。次のように、関数のプロトタイプを指定します。

#ifdef __cplusplus
extern "C"
#endif
MYSERVICE(TPSVCINFO *tpsvcinfo)

"C"リンクを持つサービス名を宣言すると、C++コンパイラによって名前が変更されなくなります。多くのC++コンパイラでは、パラメータおよび関数の戻り値の型情報を含むように関数名が変更されます。

このように宣言すると、次の操作が可能になります。

  • CとC++の両方のサービス・ルーチンを1つのサーバーにリンクできます。その場合、各ルーチンのタイプを示す必要はありません。
  • 動的なサービス通知を行うことができます。動的なサービス通知では、実行可能ファイルのシンボル表にアクセスして、関数名を取得する必要があります。