社区
C++ 语言
帖子详情
怎么用exe调用另一个exe里函数,像调用dll那样
pass2000123
2010-07-06 10:56:56
如题,现在有需要像调用dll里的函数那样调用一个exe里面的函数,不知道该怎么做,有些人说可以像DLL那样调用,有些人说不可以,我也调试了 LoadLibaryEx("a.exe",null,**AS_FILEDATA)也照网上那样写了,好像这一步好了,但下面获取函数地址的时候又是空地址。
所以请各位大侠指教下。
最好有个详细的例子,多谢
...全文
1070
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的路径,然后执行就行了
kingchj
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)
java用JNA
调用
dll
实例,包含各种参数
调用
实例中演示了各种参数形式的
DLL
函数
调用
,如:基本数据类型、基本数据类型的指针和引用、结构体、结构体的指针和引用、
函数
指针和回调
函数
、字符串指针、输入数组、输出数组等,非常实用。
EXE
和
DLL
互相
调用
exe
可以
调用
dll
中的
函数
,反过来
dll
能不能
调用
exe
中的
函数
? 比如:
exe
中有A , C 两
函数
,
dll
中有
函数
B 能否 A
调用
B , B
函数
中又
调用
C ? 答一: 首先说明 可以做到 但这种
调用
方式不好 ...
VS中
exe
如何
调用
dll
exe
调用
动态库,首先要让
exe
知道要
调用
那些动态库,这些信息全部写在和
dll
同名的lib文件中,凡是
exe
需要用到的
dll
,其lib文件必须
一个
不落的添加到依赖库中,少了
一个
也会导致编译出错。
exe
调用
dll
包含以下两种情况...
exe
函数
与
dll
函数
的相互
调用
今天学习了
DLL
和
EXE
函数
的相互
调用
,记录...#define EXPORT __declspec(
dll
export) //这
里
定义
一个
宏,作声明导出
函数
用的,我们在其它程序或
DLL
中GetProcAddress才可能成功。 #pragma comment(lib,"kernel32.lib")
随想录(
exe
和
dll
的相互
调用
)
【 声明:版权所有,欢迎转载,请勿用于商业用途。... 有一种编程方法,就是需要在
exe
和
dll
之间进行...
exe
调用
dll
其实比较简单的。因为在windows系统
里
面有默认的LoadLibrary
函数
,根据这个
函数
选择动态加载
dll
就...
C++ 语言
64,641
社区成员
250,579
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章