jh_wang2004 wrote:
> ------------------------------------------------------------------------------------------------------
>
> Hi Tim:
>     Thanks a lot for you reply. According to the COM document , the
> function declaration in
> C++ is
>    lRet = object.ReadDeviceBlock(szDevice、lSize、*lplData)
>        Long lRet  (return value, 0 is read success, otherwise is read
> failed)   Output
>        CString szDevice (Device register name)  Input
>       Long lSize (Read data counter) Input
>       Long *lplData (restore read value from device) Output

That's not a function declaration.  That's an example call of how to
call it.  This doesn't show how the parameters are actually declared. 
For example, you cannot have a CString as a COM parameter.  It's not
allowed.  A program might pass a CString, but it will be converted to a
COM string type, based on the declaration.

Too many people do not understand that there are strict rules for
declaring COM parameters, to make sure they work in all of the various
languages that can refer to COM.  Even without seeing the actual
declaration, I can tell you that this API violates those rules.  You
can't pass a raw pointer, because some languages can't deal with raw
pointers.  Plus, there's no way for the called function to know how
large that buffer is.

-- 
Tim Roberts, t...@probo.com
Providenza & Boekelheide, Inc.

_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32

Reply via email to