Сейчас на форуме: bartolomeo, vasilevradislav, rmn, Magister Yoda (+7 невидимых) |
eXeL@B —› Программирование —› проблема с shared-memory |
Посл.ответ | Сообщение |
|
Создано: 19 декабря 2008 07:59 · Личное сообщение · #1 Имеется С# приложение и С++ кодес, который получает из последнего параметры. Решил сделать через shared-секцию в общей DLL, которую будет импортировать и тот и другой код: // shrd.dll #pragma data_seg("Shared") volatile BOOL g_Once = FALSE; #pragma data_seg() __declspec(allocate("Shared")) volatile BOOL fvars[FVAR_NUM]; #pragma comment(linker, "/SECTION:Shared,RWS") // C# app unsafe class ShrdMethods { [DllImport("shrd.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int GetVariable(int varnum); ... и обычный C-код с LoadLibrary/GetProcAddress. Обычный C-код (как и любое другое non-managed приложение, если податтачить туда руками общую либу) после загрузки shrd.dll видит эту секцию. C#-код, который загружает себе shrd.dll имеет )) ее изолированно, т.е. shared-секция не разделяется. Самое интересное, что на одной системе это так, на другой (не могу представить какие должны быть отличия, возможно разные версии framework-a? Oo) всё прекрасно работает, т.е. как C#, так и C код прекрасно видят общие данные. что не так? если проблема нерешаема, как еще грамотно разделить данные в памяти, чтобы этой проблемы не было? thx. |
|
Создано: 19 декабря 2008 10:55 · Личное сообщение · #2 |
|
Создано: 19 декабря 2008 11:06 · Личное сообщение · #3 |
|
Создано: 19 декабря 2008 13:15 · Поправил: gazlan · Личное сообщение · #4 |
|
Создано: 19 декабря 2008 13:43 · Личное сообщение · #5 |
|
Создано: 19 декабря 2008 17:34 · Поправил: Rascal · Личное сообщение · #6 |
eXeL@B —› Программирование —› проблема с shared-memory |