Совместное использование объекта между экземплярами C ++ DLL - PullRequest
1 голос
/ 16 ноября 2010

Доброе утро всем,

Простите, если название не слишком ясное, я постараюсь объяснить здесь больше:

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

Когда это не сработало, я проверил и обнаружил, что программа VBS2 использует другой экземпляробъект «message», в котором я хранил переменную, к объекту, к которому обращается мое приложение.

Я хотел бы, чтобы мое приложение получило доступ к тому же экземпляру объекта, к которому обращается VBS2.Я немного поэкспериментировал с

#pragma data_seg(".testseg")
Message msg;
void foo(...); //etc.
#pragma data_seg()

, но по тем или иным причинам кажется, что используются два экземпляра.

Я был бы очень признателен за любую помощь и добавил бы, чтоC ++ - новый язык для меня, поэтому, пожалуйста, будьте осторожны.:)

Спасибо, М

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

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

См. http://msdn.microsoft.com/en-us/library/ms933104.aspx

Полагаю, вам нужно добавить что-то вроде

#pragma comment(linker, "/SECTION:.testseg,RWS")

к вашей программе.Я не уверен, это может работать только в DLL ...

0 голосов
/ 16 ноября 2010

Если я правильно понимаю, что вы хотите, вы не можете сделать это с помощью стандартных инструментов C / C ++. Ваша программа и другая программа живут в отдельных пространствах памяти, и они полностью изолированы друг от друга. Если ваша программа имеет права администратора, вы можете попытаться прочитать и записать пространство памяти другого процесса, используя WriteProcessMemory ():

http://msdn.microsoft.com/en-us/library/ms681674%28v=VS.85%29.aspx

Но тогда возникает проблема с поиском нужного объекта в этом пространстве памяти.

Не ясно, есть ли у вас источник для плагина. Если вы это сделаете, есть другие методы межпроцессного взаимодействия, которые могут быть использованы. К сожалению, не так просто, как просто изменить переменную.

...