2011-12-22 2 views
0

У меня проблема с моими приложениями - win32. У меня есть клиент и сервер (ничего не связано с сетью, просто именами). Клиентское приложение isnt приложение, это плагин, работающий в основном приложении. Серверное приложение является внешним приложением и имеет закрытый исходный код и может выполнять функции обратного вызова от клиента. Клиент (плагин) взаимодействует с MainApplication через «Link» (указатель на структуру с функциями) и может отправлять указатели на определенные определенные структуры (уже заполненные), например: структура с сообщением, датой и именем. Я могу просто изменить исходный код плагина. Теперь проблема, вызывающая вызов сервера (например, полученное сообщение), создает и заполняет там «структуру сообщений», а затем использует ссылку для отправки указателя на эту структуру. Ошибка MainApplication, потому что не может прочитать этот блок памяти.Проблема с доступом к памяти

Функция вызова сервера-> создание и наполнение структуры-> указатель отправки для этой структуры в MainApplication через Link-> MainApplication пытается считывать аддоны памяти и сбой BAM.

Если я сделаю это вручную, из плагина он работает.

Как отправить эту структуру в основное приложение? MainApplication может получать только адрес в структуре. Может быть, немного запутался, но вы должны понять проблему.

+0

Просто, чтобы быть ясным - «клиент» - это плагин работает в том же процессе, что и «сервер», верно? Кроме того, вы должны опубликовать хотя бы * некоторый * код, такой как структура, заполняемая клиентом, и как клиент отправляет сообщение и/или результат на сервер. –

+0

Отдельные процессы имеют отдельные адресные пространства памяти, если вы явно не используете области разделяемой памяти. Ты? –

+0

MainApplication and Server - это два отдельных приложения. Клиент - это плагин, работающий в том же процессе, что и MainApplication. Структура структуры не требуется. Если бы я использовал общую память, MainApplication мог бы прочитать, что или просто клиент (плагин) мог бы? – user1112008

ответ

1

Указатель на функцию вызова сервера для этой структуры в MainApplication может быть локальным указателем для этой функции сервера. Вы можете динамически выделять пространство памяти этому указателю, которое будет выделено и, надеюсь, сможет передать его в основное приложение. Это не приведет к сбою кода, так как вы еще не освободили память из кучи, а затем вы можете освободить ее из кучи после того, как основное приложение выполнено с помощью указателя

Смежные вопросы