I have interfaced Python to the 32-bit clientapi10m.dll and pcms_api10m.dll using ctypes successfully.
With the upgrade to client 14.5.3 I noticed the "prog64" directory contained 64-bit versions of these dlls. Since it would be advantageous to be able to use a 64-bit python, I tried using the 64-bit DLLs. I can use the functions in clientapi10m.dll without needing any changes (other than the DLL load path).
However, I have a strange issue with pcms_api10m.dll. My calls to PcmsInitSpec continue to work, but calling PcmsGetAttrs, PcmsGetWsetObj or PcmsSetWsetObj now fail (returning -1). The call to PcmsInitSpec populates PcmsObjStruct correctly, as far as I can tell, and I then give this to PcmsGetAttrs, which seems to dislike it. Most of the other functions in the pcms API also now fail. There doesn't seem to be an error string set after these calls.
PcmsInitSpec is very simple, ask for an object matching a spec as string, get an object back.
PcmsGetWsetObj is even simpler, ask for an object, get an object.
I can see only 2 significant differences between the functions:
1. PcmsInitSpec is passed a pointer to allocated space for a PcmsObjStruct, whereas GetWsetObj is passed a null pointer. Based on experimentation, I believe GetWsetObj returns a pointer to some internal object, rather that allocating space and copying the object or populating space allocated in the calling function.
2. PcmsInitSpec does not allocate and populate the attributes in the PcmsObjStruct, whereas GetWsetObj does.
If I take the object returned by PcmsInitSpec and pass it to PcmsGetAttrs, PcmsGetAttrs also returns an error. I wondered if a pointer length bug in the PcmsObjStruct modelled by ctypes was the explanation, but spec_uid in the object from PcmsInitSpec is correct, so it doesn't seem to be that, given that a pointer length mismatch would likely corrupt the value.
ctypes is allocating 32-bit pointers in 32-bit Python/DLLs and 64-bit pointers in 64-bit Python/DLLs, as I would expect.
What am I missing? Has anyone used the 64-bit pcms API DLLs? It looks like it goes wrong internally to the DLL in some way related to the attributes. I haven't had time to set up a C toolchain to see if I can get PcmsGetWsetObj to work in a pure C approach.