从C#调用C ++ exe函数

时间:2011-10-06 10:03:16

标签: c# c++

我正在尝试使用不同的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();

2 个答案:

答案 0 :(得分:5)

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

MyAPIFunction@16

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

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

<强>更新 好的,所以看起来你想要IPC,而不是P / Invoke调用。有关如何在C#中使用命名管道的信息,请参阅this pagehere是一个很好的地方,可以开始寻找有关如何在C ++中使用命名管道的信息。

答案 1 :(得分:0)

是的,您可以从.exe完全按照.dll导出函数,而您显示的方式是正确的方法。

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