Qt/c++ library for interfacing with ELM compatible devices, as well as a .NET library.. Both of which make interfacing with an ELM device significantly easier.
hardware to convert the different communication voltages into microcontroller compatible voltages, and then the microcontroller handles parsing the actual protocol and communicating it to you over serial or USB. There's no "standardized OBD-II PID hex", that's just ELM327 compatible formatting. If you use a different microcontroller that dosen't support the ELM327 style formatting, it will not work with software meant to work with ELM327's (most generic software out there). What other microcontroller are you thinking of using? You thinking of rolling your own?
VERY top level:
PC: Send request to microcontroller
Microcontroller: Translate response to a hardware protocol the ECU understands, send request to ECU
Microcontroller: Wait for response from ECU, translate it, and send it back to PC
PC: Receive response and parse it.
My suggestion? Don't try to do too much. Get a ELM327 interface. I HIGHLY recommend using the ones from http://www.scantool.net, as they are superior in almost every way, and reliably connect (and connect faster) every time.