C++ 编写一个WIN32程序,向CMD传递参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 编写一个WIN32程序,向CMD传递参数相关的知识,希望对你有一定的参考价值。

C++ 编写一个win32程序,向CMD传递参数
可以参考以下.net程序,希望能详细说明
p = new Process();
p.StartInfo.FileName = "cmd.exe ";

// 这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;

p.Start();
p.StandardInput.WriteLine( "ping 127.0.0.1 ");// 向cmd.exe输入command
p.StandardInput.WriteLine( "exit ");
p.WaitForExit(60000);
string s = p.StandardOutput.ReadToEnd();// 得到cmd.exe的输出
p.Close();

下面的方法也可以参考
#include<stdlib.h>/*头文件包含*/
int main()

system("在这里写参数");

但每传递一个参数就要产生一个窗体。会产生很多窗体的,不好。然后,我想telnet一个机子,不知怎么传递密码,用户。。。。。

参考技术A 首先传递多个参数可以用&,例如下面的命令使cmd.exe执行ping之后再执行dir命令:
cmd /c ping 127.0.0.1>ping.txt & dir >dir.txt

再次,启动cmd有很多种方法,system这就是其中一种
还有WinExec函数,如:WinExec("cmd.exe /c dir>ping.txt", 0);
再有ShellExecute函数,如ShellExecute(NULL,"open","cmd.exe","/c dir>ping.txt",NULL, SW_HIDE );
当然还有CreateProcess函数了。
所有示例如下:

#include <stdio.h>
#include <windows.h>

// win32程序的入口函数
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)

// int a = WinExec("cmd.exe /c dir>ping.txt", 0);
// ShellExecute(0, "open", "http://www.neu.edu.cn/default.htm",NULL,NULL,SW_SHOWNORMAL);
// ShellExecute(NULL,"open","cmd.exe","/c dir>ping.txt",NULL, SW_HIDE );

STARTUPINFO si = sizeof(si) ;
PROCESS_INFORMATION pi;
TCHAR szCommandLine[] = TEXT("cmd.exe /c dir>ping.txt");
CreateProcess(NULL,szCommandLine,NULL,NULL,
FALSE,0,NULL,NULL,&si, &pi);
return 0;
本回答被提问者采纳

如何将结构从 C++ 应用程序传递到 C++ Win32 DLL?

【中文标题】如何将结构从 C++ 应用程序传递到 C++ Win32 DLL?【英文标题】:How to pass a struct from C++ application to a C++ Win32 DLL? 【发布时间】:2012-10-19 04:38:06 【问题描述】:

可以举个例子吗?

【问题讨论】:

您是否已经知道如何为您的 DLL 制作头文件,并从 C++ 程序调用您的 DLL 中的函数? 是的,但我不确定传递结构指针是否有任何问题。 【参考方案1】:

你可以传递一个指针,因为windows中的DLL和程序在同一个地址空间。

但是请注意,DLL 接口停在那里,并且您(通常)没有共享内存管理,并且您通常不能传递例如 std::vector 并期望 DLL 能够 push_back 新元素。原因是 DLL 通常有自己的内存管理器和堆,与调用者分离(毕竟 DLL 可以从任何语言调用,不一定是 C++)。

即使传递std::map 并拥有 DLL 并仅读取它可能会令人惊讶,但仍然可能无法正常工作,因为标准库中的某些容器依赖于“哨兵”,并且这些容器也可以为 DLL 复制.

在上面我使用了“一般”一词,因为 DLL 可能有一些技巧可以与主进程共享内存管理。例如,自 VC6(但不是标准库!)以来,Microsoft MFC 就被设计为绕过这些 DLL 障碍。

您还必须确保使用完全相同的编译器和编译选项编译 DLL 和主程序,否则即使是普通结构也可能具有不同的内存布局。

【讨论】:

感谢您的重播!如果我的 dll 将分发到任何地方,我是否也应该分发一个包含结构的 .h,然后任何类型的语言应用程序都可以通过 dll 结构指针而没有任何问题? 是的...您应该说明 DLL 所期望的确切内存布局。除了提供以不同语言调用库的代码示例之外,更好的是。【参考方案2】:

您的struct 是如何定义的?它是一个 POD 吗?它是一个简单的 C struct 吗?还是 struct 的成员是 STL 类的实例?

如果 struct 是“纯 C”struct,那么您可以简单地将其传递给 DLL。

但如果struct 有 STL 类作为数据成员,那么您必须确保 .EXE 和 .DLL 都使用 动态链接到 CRT,并且是使用 相同版本的 Visual C++ 编译器与 CRT 相同的风格(例如,如果您有一个 debug-build .EXE 和一个 release-build,则不能在边界传递 STL 类.DLL,因为 STL 容器的实现从调试版本变为发布版本;如果您有一个使用 VC10 构建的 .EXE 和一个使用 VC9 构建的 .DLL,则不能在边界传递 STL 类。

此外,您可能想阅读有关 CodeProject 的这篇有趣的文章: “HowTo: Export C++ classes from a DLL”

【讨论】:

感谢重播!我的结构是纯 C 的,这是我了解更多信息的好例子。

以上是关于C++ 编写一个WIN32程序,向CMD传递参数的主要内容,如果未能解决你的问题,请参考以下文章

C++ Win32程序编写入门

C++ Win32程序编写入门

如何将 C++ 对象传递给 C# 类库

从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?

微信小程序云开发(12)— “本地向云函数传递参数”

如何将参数从c ++传递到linux shell