Over the years I've gotten many questions about importing Microsoft XML with the type library importer and why the resulting *_TLB.pas file doesn't match that of Microsoft's documentation. There are a lot of interfaces with the same problem but lets take a closer look at one of them as an example. You can find the documentation for ISAXDXMLReader.getProperty here. The documentation provides the following C++ code for the getProperty function:
HRESULT getProperty( const wchar_t* pwchName, VARIANT* pvarValue );
Notice the type of pwchName. It's type is const wchar_t* which should be const WideString but as you can see after importing the type library you get:
function getProperty(var pwchName: Word; out pvarValue: OleVariant): HResult; stdcall;
Obviously the codegen is wrong but why is that. If you take a look at the .tlb in Ole View or the Type Library Editor you'll notice the following IDL:
HRESULT _stdcall getProperty( [in] unsigned short* pwchName, [out, retval] VARIANT* pvarValue);
Notice the unsigned short*. The type library importer generated it as a var Word. This means the type library is doing exactly what it should be doing.
So either the documentation is incorrect or the .tlb is incorrect.
0 comentarios:
Publicar un comentario