SnmpRegister
関数シグネチャ
// wsnmp32.dll
#include <windows.h>
DWORD SnmpRegister(
INT_PTR session,
INT_PTR srcEntity,
INT_PTR dstEntity,
INT_PTR context,
smiOID* notification,
SNMP_STATUS state
);パラメーター
| 名前 | 型 | 方向 | 説明 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| session | INT_PTR | in | トラップおよび通知の登録または登録解除を行う WinSNMP セッションのハンドル。 | ||||||
| srcEntity | INT_PTR | in | 登録要求の送信元となる管理エンティティのハンドル。SNMP マネージャーの役割を果たすこのエンティティが、トラップまたは通知を受信します。 実装はこのパラメーターを、トラップおよび通知が WinSNMP アプリケーションに到達するのをフィルタリングする目的では使用しないため、WinSNMP マネージャーアプリケーションでは通常、このパラメーターに NULL を渡します。 このパラメーターが NULL の場合、Microsoft WinSNMP 実装は、トラップおよび通知要求のすべての送信元を登録または登録解除します。 SnmpRecvMsg 関数の srcEntity パラメーターは役割が異なる点に注意してください。同関数では、srcEntity はトラップを送信したエンティティのハンドルを受け取ります。 | ||||||
| dstEntity | INT_PTR | in | 登録要求の受信側となる管理エンティティのハンドル。SNMP エージェントの役割を果たすこのエンティティが、トラップまたは通知を送信します。 このパラメーターが NULL の場合、実装は、すべての管理エンティティからのトラップおよび通知について WinSNMP アプリケーションを登録または登録解除します。 SnmpRecvMsg 関数の dstEntity パラメーターは、トラップ通知に登録する管理エンティティのハンドルを受け取る点に注意してください。 | ||||||
| context | INT_PTR | in | コンテキスト (管理対象オブジェクトリソースの集合) のハンドル。 このパラメーターが NULL の場合、実装は、すべてのコンテキストのトラップおよび通知について WinSNMP アプリケーションを登録または登録解除します。 | ||||||
| notification | smiOID* | inout | 1 種類のトラップまたは通知に対するパターンマッチング用のシーケンスを格納した smiOID 構造体へのポインター。実装はこのシーケンスを使用して、WinSNMP アプリケーションが登録または登録解除を行う対象のトラップまたは通知の種類を識別します。詳細については、後述の「解説」セクションを参照してください。 このパラメーターが NULL の場合、実装は、dstEntity パラメーターで指定された 1 つまたは複数の管理エンティティからのすべてのトラップおよび通知について WinSNMP アプリケーションを登録または登録解除します。 | ||||||
| state | SNMP_STATUS | in | WinSNMP アプリケーションがトラップおよび通知を受信するために登録するのか、登録解除するのかを示す符号なし long 整数型の変数を指定します。このパラメーターは次のいずれかの値と等しい必要がありますが、異なる値が格納されている場合、実装はアプリケーションを登録します。
|
戻り値の型: DWORD
公式ドキュメント
WinSNMP の SnmpRegister 関数は、トラップおよび通知の受信について WinSNMP アプリケーションを登録または登録解除します。アプリケーションは、登録してトラップと通知を受信することも、登録解除してトラップと通知を無効にすることもできます。
戻り値
関数が成功した場合、戻り値は SNMPAPI_SUCCESS です。
関数が失敗した場合、戻り値は SNMPAPI_FAILURE です。拡張エラー情報を取得するには、 SnmpGetLastError を呼び出します。 SnmpGetLastError 関数は、次の WinSNMP エラーまたはネットワークトランスポート層のエラーのいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
|
SnmpStartup 関数が正常に完了しませんでした。 |
|
| メモリの割り当て中にエラーが発生しました。 | |
| session パラメーターが無効です。 | |
| エンティティを指定するパラメーターの一方または両方が無効です。 | |
| context パラメーターが無効です。 | |
| notification パラメーターが無効です。 | |
| ネットワークトランスポート層が初期化されていないか、SNMPTRAP.EXE サービスを開始できませんでした。 | |
| トラップポートが使用できません。 | |
| ネットワークサブシステムで障害が発生しました。 | |
| 不明または未定義のエラーが発生しました。 |
詳細については、 Network Transport Errors を参照してください。
解説(Remarks)
通常、 SnmpRegister 関数を呼び出すのは、エージェントアプリケーションではなく WinSNMP マネージャーアプリケーションです。
管理者以外のユーザーの場合、Windows 2000 および Windows XP では SNMP トラップサービスが開始されているときにのみ SnmpRegister 関数が成功する点に注意してください。
WinSNMP アプリケーションが SnmpRegister 関数の呼び出しで srcEntity、dstEntity、context、notification の各パラメーターに NULL を渡した場合、実装はそのパラメーターを、トラップおよび通知が WinSNMP アプリケーションに到達するのをフィルタリングする目的では使用しません。前述のすべてのパラメーターに NULL を渡した場合、実装は受信したすべての通知をセッションに配信します。
WinSNMP アプリケーションが特定の種類のトラップまたは通知を受信するために登録する場合は、その種類のトラップに対応するオブジェクト識別子、すなわち smiOID 構造体を定義する必要があります。notification パラメーターは、この構造体を指している必要があります。トラップおよび通知のオブジェクト識別子は、RFC 1907「Management Information Base for Version 2 of the Simple Network Management Protocol (SNMPv2)」で定義されています。詳細については、 Managing Traps and Notifications および Translating Traps from SNMPv1 to SNMPv2C を参照してください。
実装は、notification パラメーターの値を、受信したトラップおよび通知と照合するためのパターンとして使用します。たとえば、WinSNMP アプリケーションが notification パラメーターで n 個のサブ識別子を渡し、受信したトラップの先頭 n 個のサブ識別子が渡されたすべてのサブ識別子と一致する場合、そのトラップのオブジェクト識別子は一致と見なされます。受信したトラップのサブ識別子が n 個未満の場合、オブジェクト識別子は一致しません。一致した場合、実装はそのトラップまたは通知を WinSNMP アプリケーションに送信します。
dstEntity、srcEntity、context の各パラメーターのいずれか、またはすべてが NULL の場合、実装は、後続の SnmpRecvMsg 関数の呼び出しで、同関数の対応するパラメーターのためにリソースを割り当てる必要が生じることがあります。 SnmpRecvMsg が返すリソースが不要になったら、アプリケーションはそのリソースに対応する関数を使用して個々のリソースを解放する必要があります。詳細については、 SnmpFreeEntity および SnmpFreeContext を参照してください。
詳細については、 Multiple Trap Registrations を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// wsnmp32.dll
#include <windows.h>
DWORD SnmpRegister(
INT_PTR session,
INT_PTR srcEntity,
INT_PTR dstEntity,
INT_PTR context,
smiOID* notification,
SNMP_STATUS state
);[DllImport("wsnmp32.dll", ExactSpelling = true)]
static extern uint SnmpRegister(
IntPtr session, // INT_PTR
IntPtr srcEntity, // INT_PTR
IntPtr dstEntity, // INT_PTR
IntPtr context, // INT_PTR
IntPtr notification, // smiOID* in/out
uint state // SNMP_STATUS
);<DllImport("wsnmp32.dll", ExactSpelling:=True)>
Public Shared Function SnmpRegister(
session As IntPtr, ' INT_PTR
srcEntity As IntPtr, ' INT_PTR
dstEntity As IntPtr, ' INT_PTR
context As IntPtr, ' INT_PTR
notification As IntPtr, ' smiOID* in/out
state As UInteger ' SNMP_STATUS
) As UInteger
End Function' session : INT_PTR
' srcEntity : INT_PTR
' dstEntity : INT_PTR
' context : INT_PTR
' notification : smiOID* in/out
' state : SNMP_STATUS
Declare PtrSafe Function SnmpRegister Lib "wsnmp32" ( _
ByVal session As LongPtr, _
ByVal srcEntity As LongPtr, _
ByVal dstEntity As LongPtr, _
ByVal context As LongPtr, _
ByVal notification As LongPtr, _
ByVal state As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
SnmpRegister = ctypes.windll.wsnmp32.SnmpRegister
SnmpRegister.restype = wintypes.DWORD
SnmpRegister.argtypes = [
ctypes.c_ssize_t, # session : INT_PTR
ctypes.c_ssize_t, # srcEntity : INT_PTR
ctypes.c_ssize_t, # dstEntity : INT_PTR
ctypes.c_ssize_t, # context : INT_PTR
ctypes.c_void_p, # notification : smiOID* in/out
wintypes.DWORD, # state : SNMP_STATUS
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('wsnmp32.dll')
SnmpRegister = Fiddle::Function.new(
lib['SnmpRegister'],
[
Fiddle::TYPE_INTPTR_T, # session : INT_PTR
Fiddle::TYPE_INTPTR_T, # srcEntity : INT_PTR
Fiddle::TYPE_INTPTR_T, # dstEntity : INT_PTR
Fiddle::TYPE_INTPTR_T, # context : INT_PTR
Fiddle::TYPE_VOIDP, # notification : smiOID* in/out
-Fiddle::TYPE_INT, # state : SNMP_STATUS
],
-Fiddle::TYPE_INT)#[link(name = "wsnmp32")]
extern "system" {
fn SnmpRegister(
session: isize, // INT_PTR
srcEntity: isize, // INT_PTR
dstEntity: isize, // INT_PTR
context: isize, // INT_PTR
notification: *mut smiOID, // smiOID* in/out
state: u32 // SNMP_STATUS
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("wsnmp32.dll")]
public static extern uint SnmpRegister(IntPtr session, IntPtr srcEntity, IntPtr dstEntity, IntPtr context, IntPtr notification, uint state);
"@
$api = Add-Type -MemberDefinition $sig -Name 'wsnmp32_SnmpRegister' -Namespace Win32 -PassThru
# $api::SnmpRegister(session, srcEntity, dstEntity, context, notification, state)#uselib "wsnmp32.dll"
#func global SnmpRegister "SnmpRegister" sptr, sptr, sptr, sptr, sptr, sptr
; SnmpRegister session, srcEntity, dstEntity, context, varptr(notification), state ; 戻り値は stat
; session : INT_PTR -> "sptr"
; srcEntity : INT_PTR -> "sptr"
; dstEntity : INT_PTR -> "sptr"
; context : INT_PTR -> "sptr"
; notification : smiOID* in/out -> "sptr"
; state : SNMP_STATUS -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "wsnmp32.dll" #cfunc global SnmpRegister "SnmpRegister" sptr, sptr, sptr, sptr, var, int ; res = SnmpRegister(session, srcEntity, dstEntity, context, notification, state) ; session : INT_PTR -> "sptr" ; srcEntity : INT_PTR -> "sptr" ; dstEntity : INT_PTR -> "sptr" ; context : INT_PTR -> "sptr" ; notification : smiOID* in/out -> "var" ; state : SNMP_STATUS -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "wsnmp32.dll" #cfunc global SnmpRegister "SnmpRegister" sptr, sptr, sptr, sptr, sptr, int ; res = SnmpRegister(session, srcEntity, dstEntity, context, varptr(notification), state) ; session : INT_PTR -> "sptr" ; srcEntity : INT_PTR -> "sptr" ; dstEntity : INT_PTR -> "sptr" ; context : INT_PTR -> "sptr" ; notification : smiOID* in/out -> "sptr" ; state : SNMP_STATUS -> "int" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
; DWORD SnmpRegister(INT_PTR session, INT_PTR srcEntity, INT_PTR dstEntity, INT_PTR context, smiOID* notification, SNMP_STATUS state) #uselib "wsnmp32.dll" #cfunc global SnmpRegister "SnmpRegister" intptr, intptr, intptr, intptr, var, int ; res = SnmpRegister(session, srcEntity, dstEntity, context, notification, state) ; session : INT_PTR -> "intptr" ; srcEntity : INT_PTR -> "intptr" ; dstEntity : INT_PTR -> "intptr" ; context : INT_PTR -> "intptr" ; notification : smiOID* in/out -> "var" ; state : SNMP_STATUS -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD SnmpRegister(INT_PTR session, INT_PTR srcEntity, INT_PTR dstEntity, INT_PTR context, smiOID* notification, SNMP_STATUS state) #uselib "wsnmp32.dll" #cfunc global SnmpRegister "SnmpRegister" intptr, intptr, intptr, intptr, intptr, int ; res = SnmpRegister(session, srcEntity, dstEntity, context, varptr(notification), state) ; session : INT_PTR -> "intptr" ; srcEntity : INT_PTR -> "intptr" ; dstEntity : INT_PTR -> "intptr" ; context : INT_PTR -> "intptr" ; notification : smiOID* in/out -> "intptr" ; state : SNMP_STATUS -> "int" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
wsnmp32 = windows.NewLazySystemDLL("wsnmp32.dll")
procSnmpRegister = wsnmp32.NewProc("SnmpRegister")
)
// session (INT_PTR), srcEntity (INT_PTR), dstEntity (INT_PTR), context (INT_PTR), notification (smiOID* in/out), state (SNMP_STATUS)
r1, _, err := procSnmpRegister.Call(
uintptr(session),
uintptr(srcEntity),
uintptr(dstEntity),
uintptr(context),
uintptr(notification),
uintptr(state),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction SnmpRegister(
session: NativeInt; // INT_PTR
srcEntity: NativeInt; // INT_PTR
dstEntity: NativeInt; // INT_PTR
context: NativeInt; // INT_PTR
notification: Pointer; // smiOID* in/out
state: DWORD // SNMP_STATUS
): DWORD; stdcall;
external 'wsnmp32.dll' name 'SnmpRegister';result := DllCall("wsnmp32\SnmpRegister"
, "Ptr", session ; INT_PTR
, "Ptr", srcEntity ; INT_PTR
, "Ptr", dstEntity ; INT_PTR
, "Ptr", context ; INT_PTR
, "Ptr", notification ; smiOID* in/out
, "UInt", state ; SNMP_STATUS
, "UInt") ; return: DWORD●SnmpRegister(session, srcEntity, dstEntity, context, notification, state) = DLL("wsnmp32.dll", "dword SnmpRegister(int, int, int, int, void*, dword)")
# 呼び出し: SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
# session : INT_PTR -> "int"
# srcEntity : INT_PTR -> "int"
# dstEntity : INT_PTR -> "int"
# context : INT_PTR -> "int"
# notification : smiOID* in/out -> "void*"
# state : SNMP_STATUS -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "wsnmp32" fn SnmpRegister(
session: isize, // INT_PTR
srcEntity: isize, // INT_PTR
dstEntity: isize, // INT_PTR
context: isize, // INT_PTR
notification: [*c]smiOID, // smiOID* in/out
state: u32 // SNMP_STATUS
) callconv(std.os.windows.WINAPI) u32;proc SnmpRegister(
session: int, # INT_PTR
srcEntity: int, # INT_PTR
dstEntity: int, # INT_PTR
context: int, # INT_PTR
notification: ptr smiOID, # smiOID* in/out
state: uint32 # SNMP_STATUS
): uint32 {.importc: "SnmpRegister", stdcall, dynlib: "wsnmp32.dll".}pragma(lib, "wsnmp32");
extern(Windows)
uint SnmpRegister(
ptrdiff_t session, // INT_PTR
ptrdiff_t srcEntity, // INT_PTR
ptrdiff_t dstEntity, // INT_PTR
ptrdiff_t context, // INT_PTR
smiOID* notification, // smiOID* in/out
uint state // SNMP_STATUS
);ccall((:SnmpRegister, "wsnmp32.dll"), stdcall, UInt32,
(Int, Int, Int, Int, Ptr{smiOID}, UInt32),
session, srcEntity, dstEntity, context, notification, state)
# session : INT_PTR -> Int
# srcEntity : INT_PTR -> Int
# dstEntity : INT_PTR -> Int
# context : INT_PTR -> Int
# notification : smiOID* in/out -> Ptr{smiOID}
# state : SNMP_STATUS -> UInt32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。local ffi = require("ffi")
ffi.cdef[[
uint32_t SnmpRegister(
intptr_t session,
intptr_t srcEntity,
intptr_t dstEntity,
intptr_t context,
void* notification,
uint32_t state);
]]
local wsnmp32 = ffi.load("wsnmp32")
-- wsnmp32.SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
-- session : INT_PTR
-- srcEntity : INT_PTR
-- dstEntity : INT_PTR
-- context : INT_PTR
-- notification : smiOID* in/out
-- state : SNMP_STATUS
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('wsnmp32.dll');
const SnmpRegister = lib.func('__stdcall', 'SnmpRegister', 'uint32_t', ['intptr_t', 'intptr_t', 'intptr_t', 'intptr_t', 'void *', 'uint32_t']);
// SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
// session : INT_PTR -> 'intptr_t'
// srcEntity : INT_PTR -> 'intptr_t'
// dstEntity : INT_PTR -> 'intptr_t'
// context : INT_PTR -> 'intptr_t'
// notification : smiOID* in/out -> 'void *'
// state : SNMP_STATUS -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("wsnmp32.dll", {
SnmpRegister: { parameters: ["isize", "isize", "isize", "isize", "pointer", "u32"], result: "u32" },
});
// lib.symbols.SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
// session : INT_PTR -> "isize"
// srcEntity : INT_PTR -> "isize"
// dstEntity : INT_PTR -> "isize"
// context : INT_PTR -> "isize"
// notification : smiOID* in/out -> "pointer"
// state : SNMP_STATUS -> "u32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
uint32_t SnmpRegister(
intptr_t session,
intptr_t srcEntity,
intptr_t dstEntity,
intptr_t context,
void* notification,
uint32_t state);
C, "wsnmp32.dll");
// $ffi->SnmpRegister(session, srcEntity, dstEntity, context, notification, state);
// session : INT_PTR
// srcEntity : INT_PTR
// dstEntity : INT_PTR
// context : INT_PTR
// notification : smiOID* in/out
// state : SNMP_STATUS
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public interface Wsnmp32 extends StdCallLibrary {
Wsnmp32 INSTANCE = Native.load("wsnmp32", Wsnmp32.class);
int SnmpRegister(
long session, // INT_PTR
long srcEntity, // INT_PTR
long dstEntity, // INT_PTR
long context, // INT_PTR
Pointer notification, // smiOID* in/out
int state // SNMP_STATUS
);
}@[Link("wsnmp32")]
lib Libwsnmp32
fun SnmpRegister = SnmpRegister(
session : LibC::SSizeT, # INT_PTR
srcEntity : LibC::SSizeT, # INT_PTR
dstEntity : LibC::SSizeT, # INT_PTR
context : LibC::SSizeT, # INT_PTR
notification : smiOID*, # smiOID* in/out
state : UInt32 # SNMP_STATUS
) : UInt32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef SnmpRegisterNative = Uint32 Function(IntPtr, IntPtr, IntPtr, IntPtr, Pointer<Void>, Uint32);
typedef SnmpRegisterDart = int Function(int, int, int, int, Pointer<Void>, int);
final SnmpRegister = DynamicLibrary.open('wsnmp32.dll')
.lookupFunction<SnmpRegisterNative, SnmpRegisterDart>('SnmpRegister');
// session : INT_PTR -> IntPtr
// srcEntity : INT_PTR -> IntPtr
// dstEntity : INT_PTR -> IntPtr
// context : INT_PTR -> IntPtr
// notification : smiOID* in/out -> Pointer<Void>
// state : SNMP_STATUS -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function SnmpRegister(
session: NativeInt; // INT_PTR
srcEntity: NativeInt; // INT_PTR
dstEntity: NativeInt; // INT_PTR
context: NativeInt; // INT_PTR
notification: Pointer; // smiOID* in/out
state: DWORD // SNMP_STATUS
): DWORD; stdcall;
external 'wsnmp32.dll' name 'SnmpRegister';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "SnmpRegister"
c_SnmpRegister :: CIntPtr -> CIntPtr -> CIntPtr -> CIntPtr -> Ptr () -> Word32 -> IO Word32
-- session : INT_PTR -> CIntPtr
-- srcEntity : INT_PTR -> CIntPtr
-- dstEntity : INT_PTR -> CIntPtr
-- context : INT_PTR -> CIntPtr
-- notification : smiOID* in/out -> Ptr ()
-- state : SNMP_STATUS -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let snmpregister =
foreign "SnmpRegister"
(intptr_t @-> intptr_t @-> intptr_t @-> intptr_t @-> (ptr void) @-> uint32_t @-> returning uint32_t)
(* session : INT_PTR -> intptr_t *)
(* srcEntity : INT_PTR -> intptr_t *)
(* dstEntity : INT_PTR -> intptr_t *)
(* context : INT_PTR -> intptr_t *)
(* notification : smiOID* in/out -> (ptr void) *)
(* state : SNMP_STATUS -> uint32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library wsnmp32 (t "wsnmp32.dll"))
(cffi:use-foreign-library wsnmp32)
(cffi:defcfun ("SnmpRegister" snmp-register :convention :stdcall) :uint32
(session :int64) ; INT_PTR
(src-entity :int64) ; INT_PTR
(dst-entity :int64) ; INT_PTR
(context :int64) ; INT_PTR
(notification :pointer) ; smiOID* in/out
(state :uint32)) ; SNMP_STATUS
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $SnmpRegister = Win32::API::More->new('wsnmp32',
'DWORD SnmpRegister(LPARAM session, LPARAM srcEntity, LPARAM dstEntity, LPARAM context, LPVOID notification, DWORD state)');
# my $ret = $SnmpRegister->Call($session, $srcEntity, $dstEntity, $context, $notification, $state);
# session : INT_PTR -> LPARAM
# srcEntity : INT_PTR -> LPARAM
# dstEntity : INT_PTR -> LPARAM
# context : INT_PTR -> LPARAM
# notification : smiOID* in/out -> LPVOID
# state : SNMP_STATUS -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
- f SnmpCreateSession — コールバックを伴うWinSNMPセッションを作成する。
- f SnmpFreeContext — WinSNMPコンテキストに割り当てたリソースを解放する。
- f SnmpFreeEntity — WinSNMPエンティティに割り当てたリソースを解放する。
- f SnmpRecvMsg — WinSNMPセッションで受信したメッセージを取り出す。