2012-03-22 1 views
3

У меня есть проект C++ (exe). Я хочу, чтобы dll vb.net получал данные, отправленные из проекта C++. Я хочу отправить указатель void из C++ exe в dll vb.net. Я должен отправить его по именованному каналу. Может ли какой-либо орган помочь, как я могу получить указатель void на стороне vb.net и сделать его соответствующим образом.отправка указателя void из C++ exe в dll vb.net через именованный канал

Заранее благодарен

+1

Это может работать, только если ваша dll vb.net находится в том же процессе **, что и ваш C++ exe. Это так? – sashoalm

+2

Если VBNet DLL находится в том же адресном пространстве процесса, зачем вам отправлять его по именованному каналу, просто отправьте адрес функции. И, если он находится в адресном пространстве _different_, что именно вы думаете, что сможете сделать с указателем (кроме его печати)? Вы, конечно, не сможете использовать его для получения базовых данных в адресном пространстве C++. – paxdiablo

+2

Это место в другом месте. Считаете ли вы, что лучше отправить как безопасный массив, то есть то, что на самом деле в этом указателе является структурой. Тогда вы можете рассказать мне, как я могу отнести его в разных случаях к разным структурам в dll vb.net – goldenptr

ответ

1

Как уже упоминалось. если C++ не является частью одного и того же адресного пространства (тот же запущенный процесс или «exe»), вам нужно будет перенести данные из одного процесса в другой. Обычно это называется Inter Process Communication (IPC) и может выполняться многими способами. Для этого существуют целые рамки.

Если ваше приложение на C++ - это .Net-процесс, вы можете попробовать удалиться. Самый простой способ - создать сборку, которая разделена между двумя процессами и может связываться через .net-перемычку по именованным каналам или TCP или независимо от того, что вы предпочитаете. Ive делал это много раз, и в то время как у него есть свои недостатки, его работоспособность.

Если ваше приложение на C++ не является .Net, вы, вероятно, застреваете в создании своего рода протокола и маршалируете данные между этими двумя процессами. Альтернативно, если вы просто пытаетесь использовать библиотеку C++ в приложении .net, вы можете попробовать создать сборку C++ .Net (что MS вызывает IJW). Его немного сложно настроить, но работает довольно хорошо. Преимущество в том, что вы можете объединить данные так же легко, как вызвать функцию в своем основном приложении. Самым большим недостатком является то, что сборки C++ не поддерживают «CPU any», поэтому любое приложение, ссылающееся на вашу сборку C++, должно соответствовать его 32 или 63-битной сборке.

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