web和c++的交互问题!!急

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web和c++的交互问题!!急相关的知识,希望对你有一定的参考价值。

要写一个网站,工作是从网站中读入数据作为一个c++程序的参数,并调用c++程序执行,并将执行的结果返回到网站上
大家可以给一个最基本的,比如说假设c++程序是参数a b返回a+b的例子
或者说有没有办法把调用的c++程序作为cgi啊 怎么做呢? 是只要是编译好的程序就可以作为cgi么? 而且谁知道该怎么用cgi去做这件事情呢?
我完全不明白网页的这些东东。。。谁能详细说一下?

//
function
example
#include
int
addition
(int
a,
int
b)

int
r;
r=a+b;
return
(r);

int
main
()

int
z;
z
=
addition
(5,3);
cout
<<
"The
result
is
"
<<
z;
return
0;

The
result
is
8
以看到
main
函数以定义一个整型变量z
开始。紧跟着我们看到调用addition
函数。我们可以看到函数调用的写法和上面函数定义本身十分相似:
参数有明显的对应关系。在main
函数中我们调用addition
函数,并传入两个数值:
5
和3
, 它们对应函数addition
中定义的参数int
a
和int
b。
当函数在main
中被调用时,程序执行的控制权从main转移到函数addition。调用传递的两个参数的数值
(5
和3)
被复制到函数的本地变量(local
variables)
int
a
和int
b
中。
函数addition
中定义了新的变量(int
r;),通过表达式r=a+b;,
它把a
加b
的结果赋给r
。因为传过来的参数a
和b
的值分别为5
和3
,所以结果是8。
下面一行代码:
return
(r);
结束函数addition,并把控制权交还给调用它的函数(main)
,从调用addition的地方开始继续向下执行。另外,return
在调用的时候后面跟着变量r
(return
(r);),
它当时的值为8,
这个值被称为函数的返回值。
函数返回的数值就是函数的计算结果,因此,
z
将存储函数addition
(5,
3)返回的数值,
即8。用另一种方式解释,你也可以想象成调用函数(addition
(5,3))
被替换成了它的返回值
(8)
参考技术A // function example
#include <iostream.h>
int addition (int a, int b)

int r;
r=a+b;
return (r);

int main ()

int z;
z = addition (5,3);
cout << "The result is " << z;
return 0;

The result is 8
以看到 main 函数以定义一个整型变量z 开始。紧跟着我们看到调用addition 函数。我们可以看到函数调用的写法和上面函数定义本身十分相似:
参数有明显的对应关系。在main 函数中我们调用addition 函数,并传入两个数值: 5 和3 , 它们对应函数addition 中定义的参数int a 和int b。
当函数在main 中被调用时,程序执行的控制权从main转移到函数addition。调用传递的两个参数的数值 (5 和3) 被复制到函数的本地变量(local variables) int a 和int b 中。
函数addition 中定义了新的变量(int r;),通过表达式r=a+b;, 它把a 加b 的结果赋给r 。因为传过来的参数a 和b 的值分别为5 和3 ,所以结果是8。
下面一行代码:
return (r);
结束函数addition,并把控制权交还给调用它的函数(main) ,从调用addition的地方开始继续向下执行。另外,return 在调用的时候后面跟着变量r (return (r);), 它当时的值为8, 这个值被称为函数的返回值。
函数返回的数值就是函数的计算结果,因此, z 将存储函数addition (5, 3)返回的数值, 即8。用另一种方式解释,你也可以想象成调用函数(addition (5,3)) 被替换成了它的返回值 (8)本回答被提问者采纳
参考技术B 你可以试试重定向,
输入重定向 (<) 追加(<<)
输出重定向 (>) 追加(>>)
SORT < PHONE.DAT > SORTED.DAT
SORT从phone.dat文件得到数据, sort的输出重定向到sorted.dat文件
输入输出的文件名可以用session一类的代替,
建立输入文件代替键盘输入,执行命令,等待命令执行完成或超时,返回输出文件内容
linux重定向也是大同小异, 可以都详细搜索搜索追问

还是不太明白啊 以前从来没做过网站 有什么详细的建议么?
要是有效的话我500分都给啦
网站端用什么做呢? javascriptphp还是直接写cgi啊?
能给个最简单例子情况的详细做法么?

追答

php一类的现在都不熟悉了,你看看你熟悉哪种的动态网页技术,然后熟悉下执行命令行的函数,和读写文件什么的
你说的参数是作为命令行参数,还是执行程序后从键盘输入的?
如果是命令行参数直接找找命令行的函数就行,比如php的exec,system
http://php.freehostingguru.com/group.php-14.php

追问

我现在已经用c#解决了这个问题 但是必须要等到c++程序全部运行完以后才能够得到结果
不知道有什么方法可以随时将命令行函数的输出读出来并显示....
因为程序要运行几个小时....总不能这样等输出吧.....
我现在采用的方法是p.StandardOutput.ReadLine();
但是好像也不太行....

追答

Process.BeginOutputReadLine 方法
.NET Framework 2.0 其他版本
注意:此方法在 .NET Framework 2.0 版中是新增的。
在应用程序的重定向 StandardOutput 流上开始异步读取操作。
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.beginoutputreadline(v=vs.80).aspx
最下面有例子
主要这2行
--------
p.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
--------
private static void SortOutputHandler(object sendingProcess,
DataReceivedEventArgs outLine)

....

参考技术C 将你的C++程序写成控件模式,通过js调用控件以实现。 参考技术D 你好 我已经发至你的邮箱追问

我的邮箱是什么? 百度有邮箱么?

C++中怎么用API作图啊 ,要包含啥头文件吗? 在先急等

vc6.0 C++中怎么用API作图啊 ,要包含什么头文件吗?
不是用MFC哦。希望有例子,画个圆 矩形等等

MFC实际上也是调用了API来作图。你说的问题实际上是过去没MFC时,用C/C++和WIN API开发Windows程序的技术。这技术已经淘汰了!但是越老的技术貌似越强大!
MSDN上有WIN32程序开发的例子。 你用向导添加一个WIN32项目,再自己重写OnPaint()函数,最后用InvalidateRect(),来激发一个重画事件。
做图要用到API:
void OnPaint(HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam)

PAINTSTRUCT ps;
HDC hdc;
hdc=BeginPaint(hWnd,&ps); //GetDC本质上调用了这个
//在这里加画图代码。如:
Ellipse(hdc,0,0,100,100); //画圆
Rectangle(hdc,0,100,100,200);//画矩形
TextOut(hdc,50,50,_T("Hello, World"),6); //文字也是图
EndPaint(hWnd,&ps); //释放DC handle
参考技术A MFC的绘图类其实是对Windows GDI API的封装,目前发展到GDI+,其实直接使用GDI+也是相当强大的,我给你介绍一下怎么使用windows的GDI+吧:

(1)准备使用GDI+ 的API
#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;
(2)列子:
VOID Example_DrawLine(HDC hdc) // 函数参数为当前绘图设备上下文的句柄
Graphics graphics(hdc); // 构造一个graphics对象,然后绘图就引用此对象方法即可,厉害啊
Pen blackPen(Color(255, 0, 0, 0), 3); // 创建画笔
Point point1(100, 100); // 两个点
Point point2(500, 100);
graphics.DrawLine(&blackPen, point1, point2); // 画一条线

VOID Example_DrawRectangle(HDC hdc)

Graphics graphics(hdc);
Pen blackPen(Color(255, 0, 0, 0), 3);
Rect rect(0, 0, 200, 200); // 矩形
graphics.DrawRectangle(&blackPen, rect);

VOID Example_DrawEllipse(HDC hdc

Graphics graphics(hdc);
Pen bluePen(Color(255, 0, 0, 255));
Rect ellipseRect(0, 0, 200, 100);
graphics.DrawEllipse(&bluePen, ellipseRect);


相信你看了这几个列子应该知道怎么使用GDI+ 的API来作图了
参考技术B 一个不停地显示随机矩形的程序
#include <windows.h>

#include <stdlib.h>// for the rand function

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

void DrawRectangle (HWND) ;

int cxClient, cyClient ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)



static TCHAR szAppName[] = TEXT ("RandRect") ;

HWND hwnd ;

MSG msg ;

WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc= WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName= NULL ;

wndclass.lpszClassName= szAppName ;

if (!RegisterClass (&wndclass))



MessageBox (NULL, TEXT ("This program requires Windows NT!"),

szAppName, MB_ICONERROR) ;

return 0 ;



hwnd = CreateWindow (szAppName, TEXT ("Random Rectangles"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (TRUE)



if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))



if (msg.message == WM_QUIT)

break ;

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;



else

DrawRectangle (hwnd) ;



return msg.wParam ;



LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)



switch (iMsg)



case WM_SIZE:

cxClient = LOWORD (lParam) ;

cyClient = HIWORD (lParam) ;

return 0 ;

case WM_DESTROY:

PostQuitMessage (0) ;

return 0 ;



return DefWindowProc (hwnd, iMsg, wParam, lParam) ;



void DrawRectangle (HWND hwnd)



HBRUSHhBrush ;

HDC hdc ;

RECT rect ;

if (cxClient == 0 || cyClient == 0)

return ;

SetRect (&rect, rand () % cxClient, rand () % cyClient,

rand () % cxClient, rand () % cyClient) ;

hBrush = CreateSolidBrush (

RGB (rand () % 256, rand () % 256, rand () % 256)) ;

hdc = GetDC (hwnd) ;

FillRect (hdc, &rect, hBrush) ;

ReleaseDC (hwnd, hdc) ;

DeleteObject (hBrush) ;

参考资料:Windows程序设计中文版(CHM)

参考技术C #include "windows.h"
#include "winuser.h"
#include "wingdi.h"

HWND hwnd = 0; //如果是0,则表示在屏幕上画
HDC hdc = GetDC(hwnd);
Ellipse(hdc,0,0,100,100); //画圆
Rectangle(hdc,0,100,100,200);//画矩形
ReleaseDC(hwnd,hdc);
参考技术D 先包含windows.h再说。

以上是关于web和c++的交互问题!!急的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX 和 c++/cli 与 Web 服务器交互

什么叫交互数据,层块数据? 急~

C++中怎么用API作图啊 ,要包含啥头文件吗? 在先急等

急!请高手指教c++如何定义一个参数个数不确定的函数?

CTBS 客户端进不去,说“WEB访问失败,确保WEB端口配置正确”请问该怎么做啊,急~~~~~~~~~

(急)IP协议源代码(C++)中的转发函数谁能帮忙解释一下?