我在Windows中使用C ++控制台应用程序。我想在我的网站中使用这个应用程序,以便从客户端获取输入,然后调用此应用程序来处理它,输出将转发到Web服务器。我听说过 COM DLL ,但不知道如何为我的应用程序创建它。
答案 0 :(得分:17)
您应该尝试创建一个cgi脚本,根据应用程序的需要,您应该使用FastCGI(每次调用时都不会创建整个流程上下文)。
您应该安装Apache服务器并激活cgi模块(通常默认激活它)。 然后你可以开发一个c ++程序,将可执行文件放在配置的CGI文件夹中,给出正确的权限。这个CGI脚本应该进行某种进程间通信(可以通过套接字或共享内存,第一个更容易)。 我希望你知道CGI脚本在C / C ++ + Apache中是如何工作的,但它非常直接,总之你在stdin中接收环境并将你的答案放到stdout。
你可以使用apache,安装fastcgi模块并在你的程序中创建一个线程(它也可以在你的主循环中,但我不建议)并将apache服务器FastCGI模块附加到你的守护进程。
最后但同样重要的是,您应该将守护程序作为服务运行。
PS:有一些框架选项(比如cppcms和wt),但是从那以后 你已经有了守护进程,我认为这会很痛苦 改变一切的屁股(当然,这取决于很多 事情,比如应用程序的复杂性和大小。)
答案 1 :(得分:6)
使用CGI:http://cgi.sourceforge.net/
如何从客户端获取输入?
getenv("QUERY_STRING")
如何将输出转发到Web服务器?
cout << "<html>\n";
Hello world CGI:
#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
cout << "Content-type:text/html\r\n\r\n";
cout << "<html>\n";
cout << "<head>\n";
cout << "<title>Hello World - First CGI Program</title>\n";
cout << "</head>\n";
cout << "<body>\n";
cout << "<h2>Hello World! This is my first CGI program</h2>\n";
cout << "<p>REQUEST_METHOD = " << getenv("REQUEST_METHOD") << "</p>\n";
cout << "<p>QUERY_STRING = " << getenv("QUERY_STRING") << "</p>\n";
cout << "</body>\n";
cout << "</html>\n";
return 0;
}
答案 2 :(得分:4)
甚至还有几个用于开发它们的框架,包括Wt,cppcms,CSP等。 FastCGI的主线实现在C语言中,直接支持多种语言,包括C ++。
我建议在http://www.webtoolkit.eu/使用C ++ webtoolkit Wt(发音为Witty)。
这个框架(带有集成的应用程序服务器)允许您根据窗口小部件和信号/插槽连接设计Web应用程序,并将大部分Web应用程序留在库中。生成的应用程序是面向对象的,严格类型化的,并且可以完美地维护。该库自动检测浏览器的功能,并使用正确的方式呈现网站,避免浏览器错误。这是an example of aplication using wt
另见this thread。
答案 3 :(得分:4)
我的小组刚刚将其作为一个课程项目,我们大多使用cpp-netlib作为网络库,但我们也使用curlpp作为一些小的东西。我们将它作为Windows服务器托管在Amazon EC2实例设置上,您可以随意使用UI。这是一个相当简单的项目,但采取这种方式并不像我想象的那样有限。希望有所帮助
答案 4 :(得分:4)