If you are really concerned about protecting your intelectual property then you can combine your PC based software with some external custom made micro controller (MCU like AVR, PIC, 8051...) based hardware key
Also known as a dongle (for example http://www.microcosm.com/dinkey_pro_models.php).
No. Dongles are usually not hard for cracking, since they usually provide some ID that gets linked to features bought by a customer with some internal vendor application, which then generates an unlock key you enter in application. This is bad approach since once cracker has some valid hardware key (although possible to crack with no key at all but much harder), cracker can step through code and see code branches and what gets executed. Then cracker just has to change few jumps with a HEX patch and that's it. It works with numerous dongle protected applications, but why I call it bad? Because all you need to have a full running application already exists in executable. It is much better if you have some important function executed inside the smart hardware key. Then a result of that function cracker would need to replicate on a PC without hardware key, and to do that, a cracker would need to have knowledge of electronics, specific MCU, it's architecture, disassembly, and to have proper tools to read code from it, just to analyze it and be able to replicate it in PC. How much crackers do you think are capable of that? What ever the number is, it is thousands of times less then with usual simple off the shelf commercial dongle approach.