vc6一个exe工程如何调用别一个exe工程

vc6一个exe工程怎么调用别一个exe工程?
要是只是想调用exe怎么实现?
要是还想调用类与函数怎么实现?工程必须改为dll嘛?

------解决方案--------------------
要是只是想调用exe怎么实现?
CreateProcess

要是还想调用类与函数怎么实现?工程必须改为dll嘛?
如果预计到这个类或函数会多次用到,则把他们抽出来,做成dll
------解决方案--------------------
调用其它程序

何志丹


WinExec
原型:
UINT WinExec(
LPCSTR lpCmdLine, // address of command line
UINT uCmdShow // window style for new application
);
用于十六位操作系统及兼容系统.
例如:
WinExec( "notepad.exe f:\\调用程序.txt ",SW_SHOW);
WinExec( "notepad.exe ",SW_SHOW);
不同的参数用空格分开,故路径中不能有空格,而大部分程序默认是安装在 "...\Program Files\... ",如word,这极大的限制了WinExec的应用范围.
以上可不带路径:
1,程序所在目录.
2,当前路径.
3,系统目录,可以用GetSystemDirectory得到.
4,Windows 目录. 可以用TheGetWindowsDirectory得到.
5,在环境变量中设置的目录.

ShellExecute
原型:
HINSTANCE ShellExecute(
HWND hwnd, //父窗口句柄
LPCTSTR lpOperation, //操作, "open ", "print ", "explore "
LPCTSTR lpFile, //文件名,前面可加路径
LPCTSTR lpParameters, //参数
LPCTSTR lpDirectory, //默认文件夹
INT nShowCmd //显示方式
);

打开一个应用程序
ShellExecute(this-> m_hWnd, "open ", "calc.exe ", " ", " ", SW_SHOW );

ShellExecute(this-> m_hWnd, "open ", "notepad.exe ", "c:\MyLog.log ", " ",SW_SHOW );

打开一个同系统程序相关连的文档
ShellExecute(this-> m_hWnd, "open ", "c:\abc.txt ", " ", " ",SW_SHOW );

激活相关程序,发送EMAIL
ShellExecute(this-> m_hWnd, "open ", "mailto:nishinapp@yahoo.com ", " ", " ", SW_SHOW );

用系统打印机打印文档
ShellExecute(this-> m_hWnd, "print ", "c:\abc.txt ", " ", " ", SW_HIDE);

lpParameters的用法示例:
一,建立一个可以接受参数的程序call.exe,添加如下代码:
BOOL CCallApp::InitInstance()
{
int n = __argc;
for(int i = 1 ; i < n ; i++)
AfxMessageBox(__targv[i]);
//__targv[0]存储的是程序的文件名
...
}
二,Alt + F7的进行Project setting, Debug -> program argurments -> "1 2 3 4 5 ".
如果有多个参数,用空格分开.
三,运行.
四,执行ShellExecute(NULL,NULL, "f:\\call.exe ", "1 2 3 4 5 ",NULL,SW_SHOW);

BOOL CreateProcess(
LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);


STARTUPINFO startupInfo;
memset(&startupInfo,0,sizeof(STARTUPINFO));
startupInfo.cb = sizeof(STARTUPINFO);

示例:
//程序最启动时最大化
startupInfo.dwFlags |= STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_SHOWMAXIMIZED;

//运行....exe
PROCESS_INFORMATION ProcessInfo;
BOOL bCreate = ::CreateProcess
(
"f:\\call.exe ",// 1 2 3 4 ",
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&startupInfo,
&ProcessInfo);

//等到call.exe执行完毕
WaitForSingleObject(ProcessInfo.hProcess,1000000);
MessageBox( "调用程序结束! ");