我有两个可执行程序,一个是mfc的一个是dos的,如何融合到一起?

bugzhao 2006-03-30 08:57:13
我写了个程序,基于MFC框架,调用了另一个dos程序,带管道的。
现在程序运行没问题,我想把那个dos程序嵌入到我的主程序中,怎么实现呢?
...全文
231 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
呵呵~~~加到DOS头里面运行!DOS下的时候运行前面的,Win下时运行Win的!
whiteclouds 2006-04-03
  • 打赏
  • 举报
回复
楼上各位说的都是在win程序里调用dos程序,而楼主的意思是把dos程序的可执行代码放在win程序里,这是不可能的,dos的代码里会有如中断等操作,这些在win里是非法的,这是不可能完成的任务。记得在很早以前曾有一种技术,可以制作双平台的程序,某个程序既可以在dos里运行,也可以在win里运行,不过那是win3.2时代的事了,不知现在是否还可以这样做。
bugzhao 2006-04-03
  • 打赏
  • 举报
回复
我采取了很笨的办法,
首先我把那个dos文件设置为系统、隐藏属性,
然后把mfc的可执行程序和那个dos程序一起压缩,用winrar制作自解压文件,并使用了脚本命令:
Title=demo
Text
{
XXX版权信息等
}
Path=demotest
Overwrite=1
Silent=1
Shortcut=D,demo.exe
Setup=demo.exe


然后使用工具修改了那个自解压rar文件的图标,
这样用户双击这个可执行文件时,dos程序默认在后台解压了,同时实现了mfc调用那个dos
mfc程序退出之前,一个winexec指令删除那个dos文件:)
一切无影无踪啊,
虽然没有什么技术含金量,但也算基本达到功能了
bugzhao 2006-04-03
  • 打赏
  • 举报
回复
可能是我表述不清楚吧。。。

我现在已经采取了一种偷懒的办法实现了
MSDN3000 2006-04-02
  • 打赏
  • 举报
回复
ShellExecute可以在你的程序中运行另外的一个程序:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpVerb,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
示例如下 :
#include <shlobj.h>
#include <shlwapi.h>

main()
{
LPMALLOC pMalloc;
LPITEMIDLIST pidlWinFiles = NULL;
LPITEMIDLIST pidlItems = NULL;
IShellFolder *psfWinFiles = NULL;
IShellFolder *psfDeskTop = NULL;
LPENUMIDLIST ppenum = NULL;
STRRET strDispName;
TCHAR pszParseName[MAX_PATH];
ULONG celtFetched;
SHELLEXECUTEINFO ShExecInfo;
HRESULT hr;
BOOL fBitmap = FALSE;

hr = SHGetMalloc(&pMalloc);

hr = SHGetFolderLocation(NULL, CSIDL_WINDOWS, NULL, NULL, &pidlWinFiles);

hr = SHGetDesktopFolder(&psfDeskTop);

hr = psfDeskTop->BindToObject(pidlWinFiles, NULL, IID_IShellFolder, (LPVOID *) &psfWinFiles);
hr = psfDeskTop->Release();

hr = psfWinFiles->EnumObjects(NULL,SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &ppenum);

while( hr = ppenum->Next(1,&pidlItems, &celtFetched) == S_OK && (celtFetched) == 1)
{
psfWinFiles->GetDisplayNameOf(pidlItems, SHGDN_FORPARSING, &strDispName);
StrRetToBuf(&strDispName, pidlItems, pszParseName, MAX_PATH);
pMalloc->Free(pidlItems);
if(StrCmpI(PathFindExtension(pszParseName), TEXT( ".bmp")) == 0)
{
fBitmap = TRUE;
break;
}
}

ppenum->Release();

if(fBitmap)
{
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = NULL;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = pszParseName;
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_MAXIMIZE;
ShExecInfo.hInstApp = NULL;

ShellExecuteEx(&ShExecInfo);
}

pMalloc->Free(pidlWinFiles);
psfWinFiles->Release();

return 0;
}
oyljerry 2006-03-31
  • 打赏
  • 举报
回复
直接用ShellExecute等来调用dos程序
syy64 2006-03-31
  • 打赏
  • 举报
回复
WINEXEC函数。
bugzhao 2006-03-31
  • 打赏
  • 举报
回复
各位老大们,不要一句winexec啊,详细说说:)
另外我问的问题不是调用那个dos程序,而是怎样把那个调用的dos程序融合到我的exe文件里面去!
当然用winrar做个脚本这个办法就算啦
amdk_7 2006-03-31
  • 打赏
  • 举报
回复
WinExec
whiteclouds 2006-03-31
  • 打赏
  • 举报
回复
不可能
bugzhao 2006-03-31
  • 打赏
  • 举报
回复
各位,那个dos程序我只有exe的,没有源代码
powerwin 2006-03-31
  • 打赏
  • 举报
回复
把dos程序编译出来的obj连接到mfc中, 虽然我没做过, 但以前公司里的dos下的函数库就是这么干的.
Atomictry 2006-03-31
  • 打赏
  • 举报
回复
你都提到管道了,在你的MFC程序中用管道把你的dos重定向。
bugzhao 2006-03-30
  • 打赏
  • 举报
回复
大家帮帮忙啊

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧