从c#调用c++的exe函数

Calling C++ exe functions from C#

本文关键字:exe 函数 c++ 调用      更新时间:2023-10-16

我正在尝试使用不同的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++中使用命名管道信息的好地方。

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

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