合并一个c可执行文件,管理COM DLL和.Net gui

问题描述:

packetlistener.exe:我有一个主动监听和接收数据包的c应用程序。合并一个c可执行文件,管理COM DLL和.Net gui

comwrapper.dll:A C++ COM DLL封装了非托管C可执行

guiapp.exe:甲.NET GUI引用comwrapper.dll并使用它来显示信息并处理事件。

的方式我目前启动应用程序:

  1. 开始packetlistener.exe用命令行参数。
  2. 开始guiapp.exe

我已经花了几个小时试图找出如何很好地打包到这一个过程。

我试图做的是编译packetlistener.exe作为一个DLL,然后将其包含在guiapp项目中。但是,关于启动packetlistener作为guiapp的一部分,我完全失去了。

我是Windows开发新手,感觉自己做错了什么。 我该怎么做呢?

+0

如果您拥有C程序的源代码,请从中创建一个DLL。写一个COM接口给它,或者将它嵌入到C++/CLI代码中,并直接用它作为.NET程序集。但你的问题是什么? JUST有一个可执行文件?直接使用代码而不需要单独的进程? – xMRi

+0

我想只有一个可执行文件没有两个单独的进程。 C程序作为一个可执行文件运行,COM接口能够查询它的数据和发送命令,但只有当可执行文件已经在运行时。 我可以将C应用程序转换成DLL,然后从我的C#程序中启动它? c程序实际上是由苹果公司开源的。 https://opensource.apple.com/source/mDNSResponder/mDNSResponder-765.50。9/ – lpacyk

所以我最终搞清楚什么我想做的事。

我编译我的C应用程序到一个DLL中,并暴露出一个函数来启动它。

然后我使用PInvoke在单独的线程中调用该函数,以便它可以开始收集和发送数据包。

COM DLL神奇地似乎引用C程序运行在它自己的线程。

现在,因为我无法PInvoke嵌入的DLL,我不得不将它解压缩到一个临时文件中,你可以在这里了解到它。

How can I extract a file from an embedded resource and save it to disk?

最后我剩下一个可执行文件。

您可以使用Process.Start .NET应用程序启动一个进程:

Process.Start("packetlistener.exe", "-arg1 -arg2"); 
+0

这是否需要“packetlistener.exe”位于单独的文件中? 是否有可能建立一个dll的packetlistener.exe,然后用.net启动它? – lpacyk

+0

是的。如果你使用process.start,它需要是一个单独的exe文件在磁盘上。 –

+0

我刚刚完成了这个操作,它打开了一个单独的cmd提示符。我想知道如何将它们合并到一个应用程序中。 – lpacyk