合并一个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并使用它来显示信息并处理事件。
的方式我目前启动应用程序:
- 开始packetlistener.exe用命令行参数。
- 开始guiapp.exe
我已经花了几个小时试图找出如何很好地打包到这一个过程。
我试图做的是编译packetlistener.exe作为一个DLL,然后将其包含在guiapp项目中。但是,关于启动packetlistener作为guiapp的一部分,我完全失去了。
我是Windows开发新手,感觉自己做错了什么。 我该怎么做呢?
答
所以我最终搞清楚什么我想做的事。
我编译我的C应用程序到一个DLL中,并暴露出一个函数来启动它。
然后我使用PInvoke在单独的线程中调用该函数,以便它可以开始收集和发送数据包。
COM DLL神奇地似乎引用C程序运行在它自己的线程。
现在,因为我无法PInvoke嵌入的DLL,我不得不将它解压缩到一个临时文件中,你可以在这里了解到它。
How can I extract a file from an embedded resource and save it to disk?。
最后我剩下一个可执行文件。
如果您拥有C程序的源代码,请从中创建一个DLL。写一个COM接口给它,或者将它嵌入到C++/CLI代码中,并直接用它作为.NET程序集。但你的问题是什么? JUST有一个可执行文件?直接使用代码而不需要单独的进程? – xMRi
我想只有一个可执行文件没有两个单独的进程。 C程序作为一个可执行文件运行,COM接口能够查询它的数据和发送命令,但只有当可执行文件已经在运行时。 我可以将C应用程序转换成DLL,然后从我的C#程序中启动它? c程序实际上是由苹果公司开源的。 https://opensource.apple.com/source/mDNSResponder/mDNSResponder-765.50。9/ – lpacyk