2 запущенные программы vb6 и c # - передают простую строку между ними - PullRequest
1 голос
/ 10 октября 2009

Есть ли хороший простой способ сделать это ... это простая строка в c #, я хотел бы перейти к более старому приложению vb6, которое будет переписано позже, не нужно обширной инфраструктуры, просто быстрый и грязный, но надежный способ сделать это - спасибо!

также я могу изменить код vb6

Ответы [ 6 ]

1 голос
/ 11 октября 2009

Лучший способ сделать это - через ROT (таблица объектов). Вот образец .

Вы регистрируете объект в ROT и делаете его доступным для других приложений. В примере регистрируется объект C #, а в VB6 для доступа к нему просто используется GetObject(, "ROTProviderDotNetDlg.COMROTVictim"). Затем вы можете вызывать методы, устанавливать свойства и т. Д.

То же самое можно сделать и другим способом - объект VB6 может быть зарегистрирован в ROT, а затем доступен приложению C # для вызова методов объекта VB6.

1 голос
/ 10 октября 2009

Вы можете использовать DDE , который специально предназначен для связи между приложениями в VB6. Его можно использовать в .Net, но DDE является более старым методом связи и не очень хорошо поддерживается в .Net.

Я сделал это, используя NDdE, но даже это больше не поддерживается и не поддерживается.

Тем не менее, если вы хотите посмотреть его, вот ссылка для его загрузки: http://ndde.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=4828

Это работает довольно хорошо, но, учитывая отсутствие поддержки, это, вероятно, не лучший вариант.

Поскольку, похоже, вы ищете что-то действительно простое и вам все равно, что это хак, вы всегда можете просто публиковать сообщения в общей базе данных или записывать файлы в определенное местоположение и два приложения смотрят туда. Веб-сервисы - вариант, но я сомневаюсь, что в VB6 есть большая поддержка. (Прошло много лет с тех пор, как я работал с VB6, поэтому я не знаю, какие варианты сторонних производителей доступны для этого.)

1 голос
/ 10 октября 2009

В зависимости от того, какие компоненты у вас есть, вы можете передать сообщение от c #, которое может получить приложение vb.

На стороне C # вам нужно сделать что-то похожее на VirtualAlloc (hMem), загрузить строковые данные в эту память, использовать RegisterWindowMessage (idMsg), чтобы получить уникальное сообщение WM_, SendMessage(HWND_BROADCAST, idMsg, hMem, 0);, очистить себя после VirtualFree.

На стороне VB вам нужно создать подкласс своего окна (для этого вы можете получить элементы управления .ocx, немного погуглить) и после того, как зарегистрируете то же сообщение, прослушать его. Как только вы получите его, вы получите указатель на вашу строку. На этом этапе вы можете либо использовать функции rtl для извлечения данных из указателя, либо просто передать их объекту com и вернуть ему строку com, которую вы можете использовать в VB.

Надеюсь, это поможет!

0 голосов
/ 15 августа 2013

Меня всегда расстраивает, что не существует супер простого способа сделать это.

Именованные каналы, возможно ... все еще много работы для простого обмена.

0 голосов
/ 21 октября 2009

установить текстовое поле на vb6, события в текстовом поле вызываются sendcomand в окне текстового поля, просто перехватите события, которые вам нужны, чтобы найти правильное значение для каждого события, я использовал двойной щелчок

0 голосов
/ 11 октября 2009

Если программа VB6 уже запущена, вы могли бы использовать внепроцессный COM-объект (ActiveX exe) в качестве посредника? Что-то вроде моего ответа о связи между MatLab и VB.
Если вы запускаете программу VB6 из программы на C #, просто сделайте саму программу VB6 файлом ActiveX. Или просто передайте строку в командной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...