Hi Yuriy;
PB keeps all its object definitions in its own descriptor syntax stored in a PowerBuilder Library (or PBL). Along with this, it generates a p-code language run time code (also stored in the PBL). The developers can add their own application logic in a language known as PowerScript. This is also saved in the PBL and simultaneously converted to P-Code for execution compatibility.
I you build and EXE to deploy your application you can choose p-code or m-code. The p-code option just strips off the existing p-code from your PBL to build an EXE. If you choose M-code (or machine code) - PB cross compiles the p-code to C++.
Now, if you map a Winform (or now defunct Webform) target on to your normal PB application and build an EXE from that - the PB IDE will cross compile your p-code to C#.
Also, if you use a Web Service target and map that on to PBL's that contain non-visual objects and deploy these to IIs - the PB IDE will cross compile these to C# as well.
HTH
Regards ... Chris