MIDL2414
The documentation lists this name without a value.
Documented in Win32
floating point or complex return types with [decode] are not supported in -Oicf, using -OI Procedures with floating point or structure/union return types are not supported in the -Oicf style pickling. A work around for 32-bit is to use the -Oi optimization mode when serializing data (using [encode] and/or [decode]). However, as the old -Oi style interpreter and pickling support are slated to be phased out after the Windows 2000 release, using pointers is strongly suggested as the work around for this problem. Also note that typically, changing an interface method to use an [out, ref] pointer instead of the return value causing the problem is fully backward-compatible on wire and can be easily hidden from the app layer. This warning can be suppressed globally by specifying -Oi on the MIDL command line or for an individual function by adding the [optimize("i")] attribute to the function in the ACF file. The following example demonstrates the issue: roo.idl: double GetDouble(); roo.acf: [decode] GetDouble(); One option to work around this limitation would be to pass an [out] parameter to hold the result instead of using a return value: roo.idl: void GetDouble([out] double *result); //top level pointer is a [ref] pointer roo.acf: [decode] GetDouble(); As mentioned earlier, the solution described above is good not only for the new interfaces but also as a work-around for the old ones. The wire representation for the new "out" argument is the same as for the return value (notice void as the new return value).