I like the idea behind the implementation very much; it is absolutely devious in my own opinion.

I haven't done much memory sharing between DLLs, but I do know that anything I do between a DLL and the application (in my experience at least) is tenuous if I don't include memory manager. Before I really got into looking around online a bunch about plugin systems and whatnot, I messed around with dynamic functions and wrote a sort of simplistic plugin "demo" for myself before I got bored with it. The whole idea behind the signifigance is that I too passed PChars from function calls, only, I never had to use ShareMem to clean up exceptions. In fact, my project never had a single exception.

To hypothesize, I think the "problem" is just a nitpick on the IDE's part. See, I think you are using real strings in the DLL and application, but passing memory and PChars through. So maybe it is just picky about the fact that you are using any strings in the DLL without ShareMem?

That's about the only possible reason I can come up with though. That's a real puzzler in my opinion.