Thanks for the support, and double thanks for that starter project.
Anyways, I've gone back to your original project to figure out exactly what changes I needed to make. Oh, and just to clairify, I got a working DLL without haveing to use the export forwarding trick. Anyways, here is a list of the changes:
1) In Template.h, move the DescBlock line to the end of the data declarations. I somehow got the feeling it may be more than 4 bytes and moving this was the last step that got things working for me. Also, this export was always after the other data exports in the data section of the original DLLs.
2) Change the Entry Point (Project->Settings->Link->Output) to DllMain. This cuts out any CRT code. I actually did this first to get rid of the annoying message box that my "Introductory" compiler puts into all compiled code.
3) Well your at the last screen, it doesn't hurt to set the base to 0x11000000 to match the other DLLs. It probably makes for a faster load but doesn't seem to be required.
Well, that was it to get a do nothing DLL. I was surprised when it suddenly started working for me.
Exporting data seems to have some issues that I've been reading about. I noticed this when tyring to use the exported Player variable. Maybe I'm doing it wrong but I had to use some ugly/bad casting hack to get a working pointer to _Player, but once I had it, the function calls worked fine. No matter how I changed things around, I couldn't get the compiler to generate the right code without the cast. It always had an extra level of indirection or it just wouldn't use the exported variable. If you check the decomiled code the compiler generates and compare it to one of the original DLLs, you'll see what I mean.
I'm also a little puzzled about how certain calls are supposed to be made. In particular, the code I've seen in the DLLs for calling CreateUnit doesn't even come close to matching anything I can get my compiler to create. I'm going to look into this next when I get the time.
Meanwhile, it might help if I understood the import library a little more. In particular, I'm wondering what method you used to create it. I read a bit about using Lib.exe to create one and figured I'd try exploring that myself but it didn't quite work. I think I lost some "?"s at the beginning of names. Possibly because of how I created the .def file from DUMPBIN (or rather how I edited it). It this what you did?
Anyways, I'm probably not going to be easy to reach for the next few days/weeks. Lots of projects comming due and finals approaching. I hope those tips help. Have fun with it.