从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(); 

是的,任何PE可执行文件都可以这样导出函数。 请记住,编译器有时会破坏导出名称,导致像这样的东西:

 MyAPIFunction@16 

您可以通过将可执行文件加载到PEInfo等工具中来检查名称是否正常。

您应该能够以与DLL中的函数完全相同的方式调用它。

更新确定,所以看起来你想要IPC,而不是P / Invoke调用。 有关如何在C#中使用命名管道的信息,请参阅此页面 。 这里是一个很好的地方,开始寻找有关如何在C ++中使用命名管道的信息。

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

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