程序编译通不过,请高人指点!

问题描述

程序编译通不过,请高人指点!有一个错误,我用vc++6.0测试的#include<stdio.h>#include<stdlib.h>#include<Windows.h>#include<tlhelp32.h>/*PROCESSENTRY32pr32={0};HANDLEhSnap;*/wchar_tLogFile[256]={0};//dll入口BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){returntrue;}voidLogToFile(char*lpFmt,...){charbuff[1024];va_listarglist;va_start(arglist,lpFmt);_vsnprintf(buff,sizeof(buff),lpFmt,arglist);va_end(arglist);/*MessageBoxA(NULL,"BegainWideCharToMultiByte","FileName",MB_OK);DWORDdwTextLen=WideCharToMultiByte(CP_ACP,0,LogFile,-1,NULL,0,NULL,NULL);MessageBoxA(NULL,"DoneWideCharToMultiByte","FileName",MB_OK);char*szFileName=newchar[dwTextLen+1];memset((void*)szFileName,0,dwTextLen+1);WideCharToMultiByte(CP_ACP,0,LogFile,-1,szFileName,dwTextLen,NULL,NULL);*//*MessageBox(NULL,LogFile,L"FileName",MB_OK);MessageBoxA(NULL,buff,"Log",MB_OK);*/HANDLEhFile;__try{hFile=CreateFileW(LogFile,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);DWORDdwWritten=0;WriteFile(hFile,buff,strlen(buff),&dwWritten,NULL);}__except(EXCEPTION_EXECUTE_HANDLER){//charerror[256]={0};//MessageBoxA(NULL,itoa(GetLastError(),error,10),"Error",MB_OK);}//MessageBoxA(NULL,"Afterfopen","FileName",MB_OK);/*FILE*fp=fopen("e:\1.txt","w");MessageBoxA(NULL,"Afterfopen","FileName",MB_OK);if(fp){MessageBoxA(NULL,buff,"Log",MB_OK);fprintf(fp,"%sn",buff);fclose(fp);}else{MessageBoxA(NULL,"openfileerror","Log",MB_OK);}*/}/*//列举进程BOOLListProcess(){pr32.dwSize=sizeof(PROCESSENTRY32);hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);if(hSnap==(HANDLE)-1){returnfalse;}if(Process32First(hSnap,&pr32)==FALSE){CloseHandle(hSnap);returnfalse;}returntrue;}//查找父进程的PID,失败返回-1DWORDFindParentProcID(){ListProcess();DWORDdwCurrentID=GetCurrentProcessId();do{if(pr32.th32ProcessID==dwCurrentID){CloseHandle(hSnap);returnpr32.th32ParentProcessID;}}while(Process32Next(hSnap,&pr32));CloseHandle(hSnap);return-1;}typedefstructtagWNDINFO{DWORDdwProcessId;HWNDhWnd;}WNDINFO,*LPWNDINFO;BOOLCALLBACKYourEnumProc(HWNDhWnd,LPARAMlParam){DWORDdwProcessId;GetWindowThreadProcessId(hWnd,&dwProcessId);LPWNDINFOpInfo=(LPWNDINFO)lParam;if(dwProcessId==pInfo->dwProcessId){pInfo->hWnd=hWnd;returnFALSE;}returnTRUE;}//找到进程主窗口的hWnd,如果没有,返回NULLHWNDGetProcessMainWnd(DWORDdwProcessId){WNDINFOwi;wi.dwProcessId=dwProcessId;wi.hWnd=NULL;EnumWindows(YourEnumProc,(LPARAM)&wi);returnwi.hWnd;}//向父窗口写数据voidSendBufferToConsole(char*szBuffer){DWORDdwProcID;HWNDhWnd;dwProcID=FindParentProcID();if(dwProcID==-1){return;}hWnd=GetProcessMainWnd(dwProcID);if(hWnd==NULL){return;}for(inti=0;i<strlen(szBuffer);i++){if(szBuffer[i]=='n'||szBuffer[i]=='r'){szBuffer[i]='';}SendMessageW(hWnd,WM_CHAR,WPARAM(szBuffer[i]),NULL);}SendMessageW(hWnd,WM_CHAR,WPARAM('r'),NULL);SendMessageW(hWnd,WM_CHAR,WPARAM('n'),NULL);}*/voidRunExe(HWNDhwnd,HINSTANCEhinst,LPSTRszCmdLine,intnCmdShow){if(szCmdLine==NULL){return;}DWORDdwNum=MultiByteToWideChar(CP_ACP,0,szCmdLine,-1,NULL,0);wchar_t*wszCmdLine=newwchar_t[dwNum];if(!wszCmdLine){return;}MultiByteToWideChar(CP_ACP,0,szCmdLine,-1,wszCmdLine,dwNum);//MessageBox(NULL,wszCmdLine,L"CommandLine",MB_OK);intargc;LPWSTR*argv=CommandLineToArgvW(wszCmdLine,&argc);wchar_tCmd[256]={0};wchar_tArgs[1024]={0};//最少要两个参数,exe程序名和回显log文件名if(argc<2){return;}wcsncpy(LogFile,argv[0],sizeof(LogFile)-1);wcsncpy(Cmd,argv[1],sizeof(Cmd)-1);//MessageBox(NULL,LogFile,L"LogFile",MB_OK);//MessageBox(NULL,Cmd,L"Command",MB_OK);//还有其它提供给exe程序的参数if(argc>2){for(intindex=2;index<argc;index++){wcscat(wcscat(Args,L""),argv[index]);}}//MessageBox(NULL,Args,L"Arguments",MB_OK);SECURITY_ATTRIBUTESsa;HANDLEhRead,hWrite;sa.nLength=sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor=NULL;sa.bInheritHandle=TRUE;if(!CreatePipe(&hRead,&hWrite,&sa,0)){return;}//MessageBox(NULL,L"Createpipeok",L"pipe",MB_OK);STARTUPINFOsi;memset((void*)&si,0,sizeof(STARTUPINFOA));GetStartupInfoW(&si);si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;si.cb=sizeof(STARTUPINFO);si.wShowWindow=SW_HIDE;si.hStdError=hWrite;si.hStdOutput=hWrite;PROCESS_INFORMATIONprocessInfo;memset((void*)&processInfo,0,sizeof(PROCESS_INFORMATION));//建立进程boolret=CreateProcessW(Cmd,Args,&sa,NULL,1,0,NULL,NULL,&si,&processInfo);if(!ret){return;}//MessageBox(NULL,L"Createprocessok",L"process",MB_OK);charszBuffer[4096]={0};DWORDdwRead=0;while(true){//测试管道是否可读,20次尝试还没有数据,直接跳出for(inti=0;i<60;i++){dwRead=0;PeekNamedPipe(hRead,szBuffer,4095,&dwRead,NULL,NULL);//无数据等待1秒后重试if(dwRead<=0){//MessageBox(NULL,L"Nodatacanread",L"PeekNamedPipe",MB_OK);Sleep(1000);}//有数据则跳出else{//MessageBox(NULL,L"Somedatacanread",L"PeekNamedPipe",MB_OK);break;}}//判断是有数据跳出,还是无数据尝试超过最大次数而跳出if(dwRead<=0){//MessageBox(NULL,L"Nodatacanreadfinally",L"PeekNamedPipe",MB_OK);break;}//执行到此处,说明有数据可读memset(szBuffer,0,4096);if(!ReadFile(hRead,szBuffer,4095,&dwRead,NULL)){//MessageBox(NULL,L"ReadFilefailed",L"ReadFile",MB_OK);break;}//MessageBox(NULL,szBuffer,L"ReadFile",MB_OK);LogToFile(szBuffer);/*boolbRunning=false;ListProcess();do{if(pr32.th32ProcessID==processInfo.dwProcessId){bRunning=true;break;}}while(Process32Next(hSnap,&pr32));if(!bRunning){break;}*/}//MessageBoxA(NULL,"willterminateprocess","Main",MB_OK);if(processInfo.hProcess){TerminateProcess(processInfo.hProcess,0);}}

解决方案

解决方案二:
对了,这个程序我想生成DLL文件,想用rundll32dllname,functionname[arguments]这个命令执行程序
解决方案三:
STARTUPINFOWsi;
解决方案四:
怎么不缩进一下啊?看着太费劲了…
解决方案五:
具体怎么修改呢
解决方案六:
cplusplus好像放错地方啦呵呵
解决方案七:
高人帮我调试成功好吗?求求你拉

时间: 2024-11-09 09:28:36

程序编译通不过,请高人指点!的相关文章

代码-关于vb.net反编译的问题---请高人指点

问题描述 关于vb.net反编译的问题---请高人指点 背景:使用asp.net做前台页面,后台代码是vb.net.之后使用VS发布网站.发布网站的时候将所有资源(包括aspx/aspx.vb/js/resource等等吧)都打包为DLL.在网站的Bin目录下. 任务:需要将Bin目录下的DLL反编译后获得代码,之后再编译得到代码生成DLL后放到网站发布的Bin目录下.之后重启IIS服务,网站可以正常运行.也就是说页面可以显示出来. 遇到的问题.使用Reflactor反编译代码后,得到vb.ne

wpf 3 5启动报错-WPF程序,framework 3.5 sp1环境,启动程序报错,4.0的就没事,请高人指点

问题描述 WPF程序,framework 3.5 sp1环境,启动程序报错,4.0的就没事,请高人指点 {"未能加载文件或程序集"PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"或它的某一个依赖项.该模块应包含一个程序集清单."} 该问题如何能解 请遇到过此问题的同仁指点

if else if-下面这段程序为什么运行到选择if语句就不行了,只能运行到输入分数,请高人指点

问题描述 下面这段程序为什么运行到选择if语句就不行了,只能运行到输入分数,请高人指点 include int main(void) { float score; printf("请输入你的考试成绩:n"); scanf("%f", score); if(score > 100) printf("白日做梦n"); else if(score>=90 && score<=100) printf("优n&q

会员共享-多个网站之间如何共享会员帐户及基本信息?请高人指点

问题描述 多个网站之间如何共享会员帐户及基本信息?请高人指点 两个地方门户网站,相互独立,目前有意向合作,让会员之间可以相互登录帐号,这是第一步:以后如何服务能够跟上的话或者效果不错的,可以会员信息共享,甚至活动记录等信息都可以. 目前,准备用接口使会员相互可以登录,不知道如何做是比较安全一点的! 如果可以以后的话,是否有更好的办法? 请多多指点? 解决方案 http://baike.baidu.com/link?url=ZOaUxiONDY8YrxKAajD9jXFqA8EVukdyDvegz

源代码-COM控件编译连接成功 但手动编译总是失败 请高手指点下

问题描述 COM控件编译连接成功 但手动编译总是失败 请高手指点下 这几天做COM技术内幕第10章的例子,手动编译时碰到了麻烦,请高手指点下! 问题如下:(我用的是VS2013C++) 这一章的例子用到手动编译,我这方面没经验,总是出错,于是就想到把客户端,COM控件, 代理DLL,本地服务器分别用VS2013在IDE下做出来,前面的客户端,和COM控件我做出来 了,但COM控件手动编译总是出错.这个问题困了我好几天了,资料查了好多,但手动编译总是过不去. 下面是我的Makefile文件的内容:

VB.NET做的windows服务不能自动.启动;请高人指点

问题描述 我试着将一些一直要的事情用VB.NET做成WINDOWS系统服务.并注册服务也成功,功能也正常.但是,在服务管理的时候将其"启动类型"改为"自动";但是,重新启动操作系统后,发现服务并没有自动启动,即便是让它在启动失败后自动重新启动.按照cSDN中的说法:启动onstart的操作时间不超过30秒.我也修正了;即使ONSTART中只有一个动作(如下边的代码),也不行.请高人指点我一下,非常感谢.ProtectedOverridesSubOnStart(ByV

请高人指点c#调用exe的处理

问题描述 我要用c#调用exe的安装包,调用后会弹出是和否的确认框,确认后才安装,我怎么实现直接用c#调用后直接安装啊,可以跳过确认框直接安装吗?请高人指点 解决方案 解决方案二:跳不过去解决方案三:用api的findwindow,加枚举句柄,然后发送点击消息(或模拟点击)解决方案四:引用2楼bdmh的回复: 用api的findwindow,加枚举句柄,然后发送点击消息(或模拟点击) 只有这个办法了...解决方案五:不能跳过确认框,都需要用户操作的.我都是使用进程打开exe文件的.System.

c++ 编程问题-请高人指点一下这段代码的执行过程,不胜感激

问题描述 请高人指点一下这段代码的执行过程,不胜感激 请您帮忙分析一下以下代码的执行过程,在下在编译器上跑了一遍,可还是不太明白,希望能得到您的详尽的解释,谢谢! #include using namespace std; class Shape { public: Shape(){} virtual ~Shape() {} virtual float Area() const=0; virtual Shape * Clone() const=0; }; class Circle:public

我在myeclipse搭建android时出的问题,请高人指点

问题描述 我在myeclipse搭建android时出的问题,请高人指点 我是myeclipse8.5,最近在网上找了帖子搭建安卓的开发环境,在help---myeclipse configuration center--software 点击add site 在弹出的对话框中输入的URL地址https:/dl-ssl.google.com/android/eclipse去更新插件就是不成功,会报错,错误代码如下,请高人指点一下 myeclipse8.5要如何才能搭建安卓的开发环境呢?? 解决方