Quite honestly, I feel very uncomfortable with the thought of any solution that approaches the problem-at-hand at this level of detail. I think that I would prefer instead to take an XS approach ... to create a formal “wrapper” for this .DLL using methods that would insulate ... from me and from Perl ... concerns such as “exactly how-many bytes wide a Pointer is.”
I simply cannot divorce myself from the thought that this very-superficial approach is “intrinsically unmaintainable,” not to mention that I (or, my team) would wind-up being the very ones who would wind up being tasked to maintain it! I would, therefore, opt instead to create an insulating layer of C/C++ code that would specifically insulate the Perl interpreter environment from the vagaries of “my DLL.” I would vastly prefer this to any alternative which obliged my Perl source-code to be dependent(!) upon such niggling details as, “exactly how many bytes wide is pchar * on this platform, today?”
Having already dealt with too-many “software designs that dropped-dead when Intel Corporation came up with a yet-another amazing new miracle,” I am loathe to specify another one . . .