Carlos,
> BTW I wonder what they use GlobalAlloc, GlobalFree, GlobalSize for?
As I said, the MSGBOXPARAMS structure must contain not strings but pointers to strings. So for each LPCTSTR member you allocate memory (GlobalAlloc or LocalAlloc whatever), copy some text to this memory (CopyMemory) and pass the address to the structure. @ can not be used, as it is used in API declarations. In the end, this allocated memory must be freed (GlobalFree) to prevent memory leak.
The rAPIdStructure class you mentioned, probably does the same on the background, uses Alloc and Free API calls.
* * *
When you attach icons to your VFP project as "Other Files" and compile the project, the resulting executable includes them as icon resources. So I think, the VFP executable can be used instead of a resource-only DLL.
Small inconvenience is that the resource ids are initially unknown. In other words, a draft executable has to be build first.