Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调用C++;是否在另一个进程中从C#导出函数?_C#_C++_Function_Process_Call - Fatal编程技术网

如何调用C++;是否在另一个进程中从C#导出函数?

如何调用C++;是否在另一个进程中从C#导出函数?,c#,c++,function,process,call,C#,C++,Function,Process,Call,我还没有找到任何有用的相关问题后,一些严重的谷歌潜伏,所以我会问这里 我有一个用C语言编写的程序,它将一个DLL注入到另一个进程中,相当简单。它使用[DllImport]从kernel32.dll调用CreateRemoteThread和LoadLibrary 我的DLL一旦加载,就会等待C程序的身份验证,由于安全原因,我无法使用套接字传输这些数据。因此,我让我的DLL导出一个函数,该函数计划使用身份验证数据从C#程序调用 导出的函数有两个参数,如下所示: extern "C" __declsp

我还没有找到任何有用的相关问题后,一些严重的谷歌潜伏,所以我会问这里

我有一个用C语言编写的程序,它将一个DLL注入到另一个进程中,相当简单。它使用[DllImport]从kernel32.dll调用CreateRemoteThread和LoadLibrary

我的DLL一旦加载,就会等待C程序的身份验证,由于安全原因,我无法使用套接字传输这些数据。因此,我让我的DLL导出一个函数,该函数计划使用身份验证数据从C#程序调用

导出的函数有两个参数,如下所示:

extern "C" __declspec(dllexport) void DoStuff( const char* ccString1, const char* ccString2 ){

    // Do stuff

}
由于DLL与C#程序不在同一地址空间中,因此我无法使用[DllImport]获取并调用导出的函数

我的第二个想法是使用CreateRemoteThread调用函数,虽然只能传递一个参数,但我需要两个参数,这也很困难,因为我需要调用GetProcAddress的返回,我不能直接通过导出的函数调用

那么,我将如何实现这一目标


谢谢

[DllImport]与GetProcAddress相同。C#在第一次调用之前不会加载DLL,因此.NET可以在调用DLL之前进行安全检查



如果您根本不信任DLL,那么最好将de C#程序一分为二。一个程序通过Remoting/WCF/IPC连接到第二个程序,第二个程序通过DllImport连接到C DLL。此解决方案通常在不信任C DLL稳定性或内存分配时使用,因为第二个程序(调用de C DLL的程序)可以在不重新启动主程序的情况下重新启动。此模式的示例:一些windows驱动程序(除了此时不使用C#之外)。

您可以使用它在应用程序和DLL之间交换数据。

您不能使用任何IPC方法或仅使用套接字?截取两个程序之间传输的数据的功能是我希望避免的。我有很多关于套接字的经验,我知道客户可以使用像WiReSARK这样简单的程序来记录从我的C应用程序发送到我的C++ DLL的包,尽管老实说,我还没有真正使用其他的IPC方法,我不知道它们能为我工作得多好。