2011-10-06 3 views
6

Я пытаюсь контролировать запущенное приложение, написанное на C++, с использованием другого приложения C#.Вызов функций exe C++ из C#

В моей C++ код, который я определил API:

_declspec(dllexport) //is this even possible when compiling an .exe? 
int getSomething(); 

Есть ли способ, чтобы вызвать эту функцию из кода C#?

Будет ли классический подход работы:

[DllImport("myexe.exe", CharSet = CharSet.Auto)] 
public static extern int getSomething(); 
+1

Вы пробовали? : D –

+1

Чтобы ответить на первый вопрос: Да, исполняемые файлы могут экспортировать функции. – GolezTrol

+3

для уточнения, хотя вы будете загружать модуль в свой собственный процесс, не подключаясь к «запущенному приложению», которое вы пытаетесь контролировать. Для этого вам понадобится IPC. – Yaur

ответ

4

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

[email protected] 

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

Вы должны иметь возможность вызвать его точно так же, как функция в DLL.

Обновление Итак, похоже, что вы хотите IPC, а не вызов P/Invoke. См. this page для получения информации о том, как использовать именованные каналы в C#. И here - отличное место, где можно найти информацию о том, как использовать именованные каналы в C++.

+0

В какой поток будут работать вызываемые функции? –

+0

Нить вызывающего. – Polynomial

+0

Будет ли вызов, например, функции набора, изменить соответствующую переменную в процессе C++? –

0

Да, вы можете экспортировать функции из .exe точно так же, как вы можете с .dll, и способ, которым вы показали, является правильным способом.

Нет, вы не можете взаимодействовать с существующим процессом, так как загрузка функции из .dll не позволит вам взаимодействовать с другими процессами с использованием этого .dll.

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