我正在尝试使用不同的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();
答案 0 :(得分:5)
是的,任何PE可执行文件都可以通过这种方式导出函数。请记住,编译器有时会破坏导出名称,导致像这样的东西:
MyAPIFunction@16
您可以通过将可执行文件加载到PEInfo等工具中来检查名称是否正常。
您应该能够以与DLL中的函数完全相同的方式调用它。
<强>更新强> 好的,所以看起来你想要IPC,而不是P / Invoke调用。有关如何在C#中使用命名管道的信息,请参阅this page。 here是一个很好的地方,可以开始寻找有关如何在C ++中使用命名管道的信息。
答案 1 :(得分:0)
是的,您可以从.exe
完全按照.dll
导出函数,而您显示的方式是正确的方法。
不,您无法通过这样做与现有流程进行交互,就像从.dll
加载函数不允许您使用.dll
与其他流程进行交互一样。