我们有一个C#.NET应用程序,它绑定到一个非托管的C dll。 C dll使用CreateFileMapping()和MapViewOfFileEx()与同一台机器上的其他进程共享内存。
MapViewOfFileEx()使用最后一个参数(lpBaseAddress)并在我们的例子中将其设置为0x08000000。如果你在dll中尽早调用初始化函数,这对所有c / c ++应用程序都没问题。 但是,在c#中,更大的应用程序在我们甚至有机会在自动生成的静态方法Main()中调用dll的init函数之前会分配大量内存。 (小c#控制台应用程序工作正常)。
有没有办法在启动.NET应用程序之前预先将区域0x08000000预分配到0x08400000,然后自动分配类和内容?那么在我们喜欢的任何时候将共享内存映射到0x08000000应该没有问题。
限制: 这里没有明显的解决方案。