社区
C++ 语言
帖子详情
怎么用exe调用另一个exe里函数,像调用dll那样
pass2000123
2010-07-06 10:56:56
如题,现在有需要像调用dll里的函数那样调用一个exe里面的函数,不知道该怎么做,有些人说可以像DLL那样调用,有些人说不可以,我也调试了 LoadLibaryEx("a.exe",null,**AS_FILEDATA)也照网上那样写了,好像这一步好了,但下面获取函数地址的时候又是空地址。
所以请各位大侠指教下。
最好有个详细的例子,多谢
...全文
1252
36
打赏
收藏
怎么用exe调用另一个exe里函数,像调用dll那样
如题,现在有需要像调用dll里的函数那样调用一个exe里面的函数,不知道该怎么做,有些人说可以像DLL那样调用,有些人说不可以,我也调试了 LoadLibaryEx("a.exe",null,**AS_FILEDATA)也照网上那样写了,好像这一步好了,但下面获取函数地址的时候又是空地址。 所以请各位大侠指教下。 最好有个详细的例子,多谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
EXE
和
DLL
互相
调用
问:
exe
可以
调用
dll
中的
函数
,反过来
dll
能不能
调用
exe
中的
函数
? 比如:
exe
中有A , C 两
函数
,
dll
中有
函数
B 能否 A
调用
B , B
函数
中又
调用
C ? 答一: 首先说明 可以做到 但这种
调用
方式不好 导致耦合性和强 失去了
dll
作为组件开发的意义 实现的话 举个简单例子 在
dll
内定
一个
全局
函数
指针,抛出设置此函
exe
函数
与
dll
函数
的相互
调用
今天学习了
DLL
和
EXE
函数
的相互
调用
,记录如下。
EXE
程序代码: #include "stdafx.h" #include #define EXPORT __declspec(
dll
export) //这
里
定义
一个
宏,作声明导出
函数
用的,我们在其它程序或
DLL
中GetProcAddress才可能成功。 #pragma comment(lib,"kernel32.lib")
VS中
exe
如何
调用
dll
关于在vs中如何
调用
dll
,总结了几点:
exe
调用
动态库,首先要让
exe
知道要
调用
那些动态库,这些信息全部写在和
dll
同名的lib文件中,凡是
exe
需要用到的
dll
,其lib文件必须
一个
不落的添加到依赖库中,少了
一个
也会导致编译出错。
exe
调用
dll
包含以下两种情况: 第一:
exe
直接
调用
的动态库(
dll
) 第二:
exe
间接
调用
的动态库(
dll
),这
里
的间接指的是
exe
调用
的动态库中所调
c语言引用
dll
函数
,c – 如何在我的
DLL
中
调用
我的
exe
中定义的
函数
?
在您的
DLL
中有
一个
.
exe
可以
调用
的
函数
,将
函数
指针传递给您的Log
函数
.在
DLL
内部,存储该
函数
指针并在需要记录时使用它.如果您需要传递给
DLL
的
函数
不止
一个
,请考虑使用结构来存储所有相关的
函数
指针.为了简化这个界面,我强烈建议将所有这些“可自定义”的
函数
保存在普通的C中,至少作为
一个
起点.处理指向成员
函数
的指针并通过C包装器传递C对象容易出错. (但可行.)或者坚持使用C.这是
一个
简短的例子...
随想录(
exe
和
dll
的相互
调用
)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 有一种编程方法,就是需要在
exe
和
dll
之间进行相互
调用
。比如整个软件的功能都是比较简单的,大部分功能的实现依赖于插件的实现,那么这个时候就需要在
exe
和
dll
之间实现
函数
的相互
调用
。经过综合考虑,目前一般的处理方法是这样的, 1、
exe
-》
dll
exe
调用
dll
其实比较简单的。因为在windows系统
里
面有默认的LoadLibrary
函数
,根据这个
函数
选择动态加载
dll
就...
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章