2011-10-06 171 views
6

我正在尝试使用不同的C#应用​​程序监视用C++编写的正在运行的应用程序。从C调用C++ exe函数#

在我的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调用。有关如何在C#中使用命名管道的信息,请参阅this page。而here是开始寻找关于如何在C++中使用命名管道的信息的好地方。

+0

被调用的函数会在哪个线程中运行? –

+0

调用者的线程。 – Polynomial

+0

例如,调用set函数是否会改变C++进程中的相应变量? –

0

是的,您可以从.exe中导出函数,就像您可以从.dll导出函数一样,您所显示的方式也是正确的方法。

不,您无法通过这样做与现有进程进行交互,就像从.dll加载函数不允许您使用.dll与其他进程交互一样。