I am developing in C# two simple applications, running in the same local machine without network requirements.
The first application initializes an DLL (Class1) and
I've successfully used two methods:
Use a database table to contain your common data. If you wrap your calls to it in transactions then you also protection from concurrency issues.
Use PersistentDictionary to store your data, protected by a mutex. You must have some interprocess locking since PersistentDictionary can only be open by one process at a time.