File tree Expand file tree Collapse file tree 1 file changed +11
-22
lines changed
crates/samples/components/json_validator_winrt/src Expand file tree Collapse file tree 1 file changed +11
-22
lines changed Original file line number Diff line number Diff line change @@ -63,31 +63,20 @@ fn json_from_hstring(value: &HSTRING) -> Result<serde_json::Value> {
63
63
serde_json:: from_str ( & value) . map_err ( |error| Error :: new ( E_INVALIDARG , format ! ( "{error}" ) ) )
64
64
}
65
65
66
+ static JSON_VALIDATOR_FACTORY : StaticComObject < JsonValidatorFactory > =
67
+ JsonValidatorFactory . into_static ( ) ;
68
+
66
69
#[ no_mangle]
67
- unsafe extern "system" fn DllGetActivationFactory (
70
+ extern "system" fn DllGetActivationFactory (
68
71
name : Ref < HSTRING > ,
69
- result : * mut * mut std :: ffi :: c_void ,
72
+ factory : OutRef < IActivationFactory > ,
70
73
) -> HRESULT {
71
- if result. is_null ( ) {
72
- return E_POINTER ;
73
- }
74
-
75
- let mut factory: Option < IActivationFactory > = None ;
76
-
77
74
if * name == "Sample.JsonValidator" {
78
- factory = Some ( JsonValidatorFactory . into ( ) ) ;
79
- }
80
-
81
- // Dereferencing `result` is safe because we've validated that the pointer is not null and
82
- // transmuting `factory` is safe because `DllGetActivationFactory` is expected to return an
83
- // `IActivationFactory` pointer and that's what `factory` contains.
84
- unsafe {
85
- if let Some ( factory) = factory {
86
- * result = factory. into_raw ( ) ;
87
- S_OK
88
- } else {
89
- * result = std:: ptr:: null_mut ( ) ;
90
- CLASS_E_CLASSNOTAVAILABLE
91
- }
75
+ factory
76
+ . write ( Some ( JSON_VALIDATOR_FACTORY . to_interface ( ) ) )
77
+ . into ( )
78
+ } else {
79
+ _ = factory. write ( None ) ;
80
+ CLASS_E_CLASSNOTAVAILABLE
92
81
}
93
82
}
You can’t perform that action at this time.
0 commit comments