Mamène, je suis tombé sur un bug plus mineur que la majorité de mon public.
L'autre jour en décompilant une interface, RpcView m'a retourné ce genre d'idl :
[
uuid(aaaaaa-bbbb-cccc-dddd-eeeeeeeeee),
version(1.0),
]
interface ToiAussiTuLeC
{
long Proc0(
[in] long arg1,
[out] long *ResponseCount,
[out] [ref] [size_is(*ResponseCount)] structXX_t** ResponseArray
);
}
Jusque là pas de lézards, le veursé me renvoi un nombre d'éléments et un tableau de données associées. Sauf que midl.exe il kiffe franchement pas :
midl.exe /client stub .\ToiAussiTuLeC.idl
Microsoft (R) 32b/64b MIDL Compiler Version 8.01.0622
Copyright (c) Microsoft Corporation. All rights reserved.
64 bit Processing .\ToiAussiTuLeC.idl
ToiAussiTuLeC.idl
.\ToiAussiTuLeC.idl(75) : error MIDL2123 : expression used for a size attribute must not derive from an [out] only parameter : [ Parameter 'ResponseArray' of Procedure 'Proc0' ( Interface 'ToiAussiTuLeC' ) ]
Le souci, c'est ke tu peu pas décrire la taille de ton tableau de sortie à partir d'un argument qui est également un paramètre de sortie. Au mieux, tu peux lui donner une taille max :
[
uuid(aaaaaa-bbbb-cccc-dddd-eeeeeeeeee),
version(1.0),
]
interface ToiAussiTuLeC
{
long Proc0(
[in] long arg1,
[out] long *ResponseCount,
[out] [ref] [size_is(, *ResponseCount)] structXX_t** ResponseArray
);
}
Mamène, je suis tombé sur un bug plus mineur que la majorité de mon public.
L'autre jour en décompilant une interface,
RpcView
m'a retourné ce genre d'idl :Jusque là pas de lézards, le veursé me renvoi un nombre d'éléments et un tableau de données associées. Sauf que
midl.exe
il kiffe franchement pas :Le souci, c'est ke tu peu pas décrire la taille de ton tableau de sortie à partir d'un argument qui est également un paramètre de sortie. Au mieux, tu peux lui donner une taille max :
C'est ce qu'ils font dans les examples de la MSDN : https://msdn.microsoft.com/en-us/library/windows/desktop/aa367164(v=vs.85).aspx