社区
C++ 语言
帖子详情
怎么用exe调用另一个exe里函数,像调用dll那样
pass2000123
2010-07-06 10:56:56
如题,现在有需要像调用dll里的函数那样调用一个exe里面的函数,不知道该怎么做,有些人说可以像DLL那样调用,有些人说不可以,我也调试了 LoadLibaryEx("a.exe",null,**AS_FILEDATA)也照网上那样写了,好像这一步好了,但下面获取函数地址的时候又是空地址。
所以请各位大侠指教下。
最好有个详细的例子,多谢
...全文
1234
36
打赏
收藏
怎么用exe调用另一个exe里函数,像调用dll那样
如题,现在有需要像调用dll里的函数那样调用一个exe里面的函数,不知道该怎么做,有些人说可以像DLL那样调用,有些人说不可以,我也调试了 LoadLibaryEx("a.exe",null,**AS_FILEDATA)也照网上那样写了,好像这一步好了,但下面获取函数地址的时候又是空地址。 所以请各位大侠指教下。 最好有个详细的例子,多谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
36 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
YFLK
2010-09-09
打赏
举报
回复
EXE中是可以有导出表的,只是大多数情况下不需要这么做。
在EXE中就是有导出表,在其它EXE中调用另一个EXE中的函数也有很多问题,在看雪上有这方面的帖子。
zhangxuyu1118
2010-09-03
打赏
举报
回复
[Quote=引用 19 楼 zheyimiao 的回复:]
使用COM技术可以做到!把需要调用的exe封装成COM组件,然后再客户端调。具体的要参加COM原理了,涉及到的东西比较多
[/Quote]支持这个。
10楼是激发EXE而已。EXE中的接口怎样去实现,WINDOWS下你要去看COM原理。
rocsoft
2010-09-01
打赏
举报
回复
10楼以及说10楼正解的人都在浪费国家粮食。
cswuyg
2010-07-17
打赏
举报
回复
10楼的答非所问。WinExec和ShellExecute的目的是用于执行另一个可执行文件,类似于新建一个进程。
调用exe里的函数,没法直接做到。因为DLL有导出表、重定位表,而exe没有导出表,而且有的exe没有重定位表。
如果没有重定位表那什么都做不了,因为如果原exe文件中有直接寻址的指令,没有重定位表就无法修改,寻址的结果是错误的。
如果有重定位表,应该可以做到,获取要导出的函数的rva地址,新建导出表,把exe改为dll。网上可以搜索到资料。
arong1234
2010-07-17
打赏
举报
回复
我想一般人说“调用”的时候不是用这种反向工程这么复杂而麻烦的方法,而是说基本机制上是否可能。[Quote=引用 31 楼 skyworth98 的回复:]
还是有办法的,用调试器什么的找到函数地址,分析出参数类型及调用约定,总之是麻烦得很
引用 29 楼 arong1234 的回复:
如果你是使用现有的一个别人编写的exe,希望重用它的函数,我估计这基本是不可能的。如果这可以实现的,也必须要原来exe的作者做一些特别处理的(如使用dllexport把函数放入导出表),而我估计几乎没有一个程序员会做这个。
如果是你自己的一个exe,也……
[/Quote]
skyworth98
2010-07-17
打赏
举报
回复
还是有办法的,用调试器什么的找到函数地址,分析出参数类型及调用约定,总之是麻烦得很
[Quote=引用 29 楼 arong1234 的回复:]
如果你是使用现有的一个别人编写的exe,希望重用它的函数,我估计这基本是不可能的。如果这可以实现的,也必须要原来exe的作者做一些特别处理的(如使用dllexport把函数放入导出表),而我估计几乎没有一个程序员会做这个。
如果是你自己的一个exe,也许可能,但是估计没有什么人这么用。把你的代码抽出来,单独编译成dll,然后让你的exe和其他程序都用这个dll,这才是标准的方法。
[/Quote]
skyworth98
2010-07-17
打赏
举报
回复
也就是说,需要导出你想要被外部调用的函数
[Quote=引用 20 楼 johnroot 的回复:]
在EXE程序里把要被外部调用的函数 okok 定义成这样:
extern "C" __declspec(dllexport) bool okok(int rrr)
{
return false;
}
其它程序调用这个函数就可以像调用DLL一样的调用了
[/Quote]
arong1234
2010-07-17
打赏
举报
回复
如果你是使用现有的一个别人编写的exe,希望重用它的函数,我估计这基本是不可能的。如果这可以实现的,也必须要原来exe的作者做一些特别处理的(如使用dllexport把函数放入导出表),而我估计几乎没有一个程序员会做这个。
如果是你自己的一个exe,也许可能,但是估计没有什么人这么用。把你的代码抽出来,单独编译成dll,然后让你的exe和其他程序都用这个dll,这才是标准的方法。
清雨小竹
2010-07-17
打赏
举报
回复
没听说过
aizibion
2010-07-17
打赏
举报
回复
为什么非要调用其他exe里面的函数?既然这部分函数在多个exe都会使用,就是告诉你,是该把这些函数提出来封装为dll的时候了。
当然,如果楼主只是研究研究,就鄙人所知,尚不能解答。
qiutian1949
2010-07-17
打赏
举报
回复
10楼的正解,我也是这么实现的
T0Ols
2010-07-17
打赏
举报
回复
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//声明一个程序信息类
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
//设置外部程序名
Info.FileName = "anotherApplication.exe";
//设置外部程序工作目录为 该应用程序的同级目录下(Debuge)
Info.WorkingDirectory = System.Environment.CurrentDirectory;
//声明一个程序类
System.Diagnostics.Process Proc;
try
{
//启动外部程序
Proc = System.Diagnostics.Process.Start(Info);
}
catch (System.ComponentModel.Win32Exception e)
{
Console.WriteLine("系统找不到指定的程序文件。\r{0}", e);
return;
}
//打印出外部程序的开始执行时间
Console.WriteLine("外部程序的开始执行时间:{0}", Proc.StartTime);
//等待3秒钟
Proc.WaitForExit(3000);
//如果这个外部程序没有结束运行则对其强行终止
if (!Proc.HasExited)
{
Console.WriteLine("由主程序强行终止外部程序的运行!");
Proc.Kill();
}
else
{
Console.WriteLine("由外部程序正常退出!");
}
Console.WriteLine("外部程序的结束运行时间:{0}", Proc.ExitTime);
Console.WriteLine("外部程序在结束运行时的返回值:{0}", Proc.ExitCode);
}
}
}
ypb362148418
2010-07-16
打赏
举报
回复
直接在第一个exe中给出第二个EXE的路径,然后执行就行了
爱吃松仁蛋糕的甜橙
2010-07-16
打赏
举报
回复
exe也可以导出函数,同样用export关键字,编译之后就会生成一个lib。
贪食蛇男
2010-07-16
打赏
举报
回复
EXE和DLL都是标准PE文件,只是大部分EXE无导出表。
你只要给EXE适当的导出表,EXE里函数是可以做为公用函数的。
但是我没这么用过,不知道直接LoadLibrary()行不行……
johnroot
2010-07-16
打赏
举报
回复
就是要被外部调用的函数前加 extern "C" __declspec(dllexport)
johnroot
2010-07-16
打赏
举报
回复
在EXE程序里把要被外部调用的函数 okok 定义成这样:
extern "C" __declspec(dllexport) bool okok(int rrr)
{
return false;
}
其它程序调用这个函数就可以像调用DLL一样的调用了
zheyimiao
2010-07-15
打赏
举报
回复
使用COM技术可以做到!把需要调用的exe封装成COM组件,然后再客户端调。具体的要参加COM原理了,涉及到的东西比较多
gunsand
2010-07-15
打赏
举报
回复
[Quote=引用 12 楼 yzx714 的回复:]
10楼和11楼……
[/Quote]
他们好搞笑。
deviosyan
2010-07-15
打赏
举报
回复
不会,,,等待高人解答 学习
加载更多回复(16)
全球LTCC射频滤波器市场现状及未来发展趋势报告.pdf
行业研究 ,新闻稿,简短分析
先进成图大赛第13届国赛.pdf
先进成图大赛第13届国赛.pdf
实训商业源码-五金网站-毕业设计.zip
实训商业源码-五金网站-毕业设计.zip
Test failed Event not emitted解决办法.md
Test failed Event not emitted解决办法.md
COMSOL相场模拟技术在枝晶生长与雪花形成中的应用及其实现方法 · 气象学 全集
内容概要:本文介绍了COMSOL相场模拟技术及其在枝晶生长和雪花形成方面的应用。COMSOL相场模拟作为一种先进技术,利用数学和计算机技术,可以精确模拟物理、化学、生物等多个领域的复杂现象。特别是在材料科学领域,它能呈现金属凝固过程中枝晶形态的变化,有助于理解金属凝固机理并优化铸造工艺。同时,该技术也可用于模拟雪花的形成过程,揭示其形态变化规律,为气象学、地理学等领域提供研究工具。文中还提到,COMSOL提供了详细的操作模型和教程,使用户更容易掌握这项技术。 适合人群:对材料科学、物理学、气象学等领域感兴趣的科研人员和技术爱好者。 使用场景及目标:①研究金属凝固过程中的枝晶生长机制;②探索雪花的形成过程及其形态变化;③借助提供的模型和教程快速入门COMSOL相场模拟技术。 其他说明:COMSOL相场模拟技术不仅增强了我们对自然现象的理解,同时也展示了计算机技术在科学研究中的重要作用。
C++ 语言
65,179
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章