有关与ShellExecute()函数的问题(或者是exe文件调用)

pinkscorpion 2003-10-11 01:03:04
我有来年各个exe文件,一个是用bcb5.0编译的,另一个是bcb6.0编译的,想在
5.0的文件中一个命令中调用6.0的exe文件,使用ShellExecuteHandle,"open","Project1.exe",NULL,
"d:\\Pdroject1.exe",SW_SHOWNORMAL);
函数发现调用的6.0的exe不能执行,显示找不到所需的.DLL文件-vcl60.bpl。
但是单独的6.0的exe就是可以独立运行的,请问怎么解决!
另外还有其他办法可以实现这种功能么?
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fredson 2003-10-11
  • 打赏
  • 举报
回复
要把bcb中的exe文件编译成单独能执行的,就是说你的exe文件应该在一台没有装bcb的机子上也能够运行才行的!
CodeHero 2003-10-11
  • 打赏
  • 举报
回复
这显然和你的机器环境相关,我碰到过类似问题,后来的解决方法是:
你编译时,可能不行,但是你可以在产生安装程序时,打包BCB6的东西就可以运行BCB6编译的程序。
祝你好运!
pinkscorpion 2003-10-11
  • 打赏
  • 举报
回复
我的机子是用的bcb5.0!原来的是用6 .0的后来因为5的资源多所以就改为5了
飞翔的老虎 2003-10-11
  • 打赏
  • 举报
回复
在用6.0的exe时,可能编译那个exe是没有选用不要runtime的选项.系统将bpl作为dll动态载入的:)
yjy1001 2003-10-11
  • 打赏
  • 举报
回复
我只用过bcb5.0 郁闷~!
huangjuliang 2003-10-11
  • 打赏
  • 举报
回复
你现在电脑还装有BCB6?
程序中加载了一个DLL文件,但生成的EXE在脱离了DLL文件后仍然可以 单独使用,这是动态加载DLL技术。即:调用资源中的DLL。 此技术的好处:EXE可以使用DLL中的函数,但不会额外增加一 个DLL文件,在使用DLL文件的时候不需要先把DLL释放到硬盘。 在动态加载的这个DLL中定义了一个函数MRun,该函数可以动态执行一 个EXE,即:调用资源中的EXE文件或TMemoryStream中被载入的EXE流。 此技术的好处:直接把资源中的EXE加载到内存中执行,使用程序自 身嵌入的EXE文件的时候不需要先把EXE释放到硬盘上就可以直接执行。 对保密EXE文件很有用。例如:我编写的程序是A.exe,它在运行后需要 使用B.exe,而B.exe是别人编写的我没有源码,但我必须又要在我的程 序中用B.exe,这时我就把它包含到我的A.exe中,这个非常容易做到, 但是,程序A.exe在使用程序B.exe的时候按照常理必须先把B.exe释放 到硬盘上才可以用WinExec或ShellExecute函数调用它,但你在释放 到硬盘上的时候容易被别人直接复制走,而你只想让别人用你的A.exe不 想让别人直接用B.exe(因为B.exe是别人写的等原因),此时如何保密 B.exe呢?这时只要用到上面所说的MRun函数就可以了,程序A.exe在执 行B.exe的时候不需要释放到硬盘上就可以直接执行B.exe啦,是不是很爽? 说一下MRun的调用方式: MRun(流,参数,进程id); 调用成功返回True,失败返回False,三个参数解释如下: 第一个参数:一个载入了EXE的资源流或者内存流等流类型。 第二个参数:传递调用EXE的参数。如果EXE调用不需要参数,可设置为空串。 第三个参数:如果调用成功,则返回被调用EXE对应的进程ID。 细节性问题,请直接双击Project1.dpr文件进入演示代码,了解更多。演示代 码中动态加载了MemRun.dll文件,动态调用了5555044.exe文件,如果你想更换 动态调用EXE文件,只需要用其它EXE覆盖5555044.exe文件并双击Clear.bat 文件后,在Delphi中按F9重新编译运行即可。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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