[package] name = "mxaccess-callback" description = "TCP listener + RPC server for INmxSvcCallback and IRemUnknown (the callback exporter)." version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true rust-version.workspace = true authors.workspace = true [dependencies] mxaccess-rpc = { path = "../mxaccess-rpc", version = "0.0.0" } mxaccess-codec = { path = "../mxaccess-codec", version = "0.0.0" } tokio = { workspace = true } tracing = { workspace = true } rand = "0.8" # F55 / Path A — DCOM-managed callback sink. # `windows-com` enables `dcom_sink.rs` which implements # `INmxSvcCallback` as a real COM class via `windows-rs` `#[implement]`. # The marshalled OBJREF passes NmxSvc's SCM-side OXID resolution # where the hand-rolled `exporter.rs` approach fails. Default build # stays slim — the windows crate is only pulled in when the consumer # enables `windows-com`. Propagates through to # `mxaccess-rpc/windows-com` so the OBJREF marshaller is available. windows = { version = "0.62", features = [ "Win32_Foundation", "Win32_System_Com", "Win32_System_Com_Marshal", "Win32_System_Com_StructuredStorage", "Win32_System_Memory", ], optional = true } # windows-rs's `#[interface]` and `#[implement]` macros expand to # absolute `::windows_core::*` paths, so the consumer must depend on # `windows-core` directly (the `windows` crate's re-export at # `windows::core` doesn't satisfy the macro's path resolution). # Pin to the same 0.62 line as the `windows` dep above so the # `IUnknown` / `IUnknown_Vtbl` types resolve to the same crate # version that `mxaccess-rpc::com_objref_provider::IUnknownHolder` # wraps — version skew between the two would surface as "expected # IUnknown, found IUnknown" type errors at the # `IUnknownHolder::from_iunknown` boundary. windows-core = { version = "0.62", optional = true } [features] default = [] windows-com = ["dep:windows", "dep:windows-core", "mxaccess-rpc/windows-com"] [lints] workspace = true