在编程或阅读源码时,经常会碰到invoke与call这两个方法名或者名词,按照现在的中文翻译来看,都是“调用”的
意思,但两者到底是什么关系呢,秉着好奇的观点,查询了一些资料,仍然没有弄太明白,就把搜集到的一些观点放
在这里,供参考参考:
1. 来自于ms的术语搜索:
参考链接 http://www.microsoft.com/Language/en-US/Search.aspx
call:调用
To transfer program execution to some section of code
(usually a subroutine) while saving the necessary information to allow
execution to resume at the calling point when the called section has
completed execution. When a subroutine call occurs, one or more values
(known as arguments or parameters) are often passed to the subroutine,
which can then use and sometimes modify these values.
大致中文意思:
当保存了必要的信息来允许执行恢复到call点当call段完成执行时,将程序执行转换到一些代码片段(通常是子程序)。当子程序call发生时,通常会传递一到多个值(作为实参或形参)到子程序,子程序随后可以使用这些值,有些时候还会对这些值做一些修改。
invoke:调用
To call or activate; used in reference to commands and subroutines.
大致中文意思:
call或者激活,在到命令和子程序的引用中使用。
2. 论坛回帖
Call是编程者主动调用某个method,是一种有意的活动,invoke可能是有意的,也可能是非有意的,可能作为某一Action的unintended result. 所以invoke有时候又译成激活。
3. 汇编语言中:
INVOKE是编译器支持的伪指令,会检查参数. CALL会直接去栈里取参. INVOKE最后也会变成 PUSH PUSH ... CALL 的形式.
TASM5.0:
extrn ExitProcess:proc
call ExitProcess,0
:0040103C 6A00 push 00000000
:0040103E E8B5020000 call KERNEL32.ExitProcess
MASM32:
invoke ExitProcess,NULL
:00401026 6A00 push 00000000
:00401028 E801000000 call KERNEL32.ExitProcess
本质一样,在MASM32下还是用invoke保险。但是TASM下缺失参数一样会出错的。
参考链接:http://bbs.bccn.net/thread-238091-1-1.html
分享到:
相关推荐
### Invoke与BeginInvoke的区别 #### 一、基本概念 在.NET框架中,`Invoke` 和 `BeginInvoke` 是两个常用的方法,主要用于实现跨线程访问控件或执行操作。这两种方法通常出现在多线程编程场景中,特别是当涉及到UI...
在探讨C#窗体中`Invoke`和`BeginInvoke`方法的使用及其重要性之前,我们首先需要理解.NET框架下的多线程与GUI操作的基本原则,以及为何这两者在跨线程更新GUI时不可或缺。 #### 一、为什么Control类提供了Invoke和...
$ cd invoke_call $ bundle update $ bundle install $ rake build $ gem install pkg/invoke_call-0.1.0.gem 编译必要的二进制文件 $ rake compile_binaries 可能(可能)会发出大量警告。 只要它不会失败,一切都...
综上所述,"C# Invoke调用Demo"是一个关于如何在多线程环境中安全更新UI的实例,通过`Invoke`或`BeginInvoke`确保后台线程的操作在UI线程上下文中执行。这些技术在开发高性能和响应式的Windows Forms应用时至关重要...
总的来说,P/Invoke Interop Assistant是.NET开发者与非托管世界交互时的重要辅助工具,它简化了接口定义,提高了开发效率,也降低了因类型不匹配导致的运行时错误。熟悉并合理使用这个工具,对于进行跨平台或混合...
《P/Invoke.NET工具详解:实现托管代码与非托管代码的无缝交互》 在软件开发过程中,有时我们需要在.NET Framework的托管代码环境中调用非托管的C/C++库或者WinAPI函数,这时就需要借助P/Invoke(Platform Invoke)...
3. **回调和事件处理**: `BeginInvoke`通常与回调函数一起使用,因为它的异步特性意味着你不能立即获取到方法执行的结果。你可以传递一个委托作为参数,这个委托将在UI线程上被调用,用来处理操作完成后的逻辑。而`...
P/Invoke Interop Assistant,它支持托管代码和非托管代码之间的方法签名的转换,而且直接生成相关的C#或者是VB的方法调用代码。这个签名的转换,不只是适用于Windows的方法签名,只要给定一个C头文件,就可以转换...
反射允许程序在运行时检查自身的信息,并且能够动态地创建对象、调用方法、访问属性和字段,以及执行其他与类型相关的操作。 在.NET中,每个类型都包含有关其成员(如方法、属性和事件)的信息。当你有一个类型的...
就Invoke和BeginInvoke进行对比介绍,穿插了一些例子在里面
在.NET框架中,与非托管代码(如C++编写的动态链接库DLL)交互是一个常见的需求,这就是P/Invoke(Platform Invoke)技术的用武之地。P/Invoke Interop Assistant是微软提供的一款工具,专门用于帮助开发者更方便地...
Ivoke-WCMDump 什么是Credential Manager ...从Credential Manager导出Windows凭据的Powershell脚本 https://github.com/peewpw/Invoke-WCMDump PS>Import-Module .\Invoke-WCMDump.ps1 ...Invoke-WCMDump
《Python库Invoke 0.11.0深度解析》 在Python的世界里,库是开发者的重要工具,它们提供了丰富的功能,极大地提高了开发效率。今天我们要深入探讨的是一个名为`invoke`的库,版本号为0.11.0,它是一个强大的任务...
AutoCAD .NET ARX Invoke是AutoCAD开发中的一个重要概念,主要涉及到使用.NET Framework与AutoCAD的ARX(Acad Runtime Extension)应用程序之间的交互。在AutoCAD的开发环境中,.NET和ARX是两种不同的扩展机制,前者...
`testdelegateinvoke3`、`testdelegateinvoke2`、`testdelegateinvoke`和`testdelegateinvoke.sln`这些文件很可能是包含更多关于委托和`Invoke`使用实例的项目或解决方案。通过查看和运行这些代码,你可以更深入地...
socket 源码程序 包含socket服务端 ,客户端,通过 Networkstream 流 streamReader /streamWriter进行动态获取写入信息。并且使用 委托 invoke ==
通过以上分析和解决方案,我们可以有效地解决Flash与C#通信过程中出现的`CallFunction`方法错误问题。需要注意的是,在实际开发中还需要考虑到其他潜在的问题,比如跨域限制、权限问题等,这些都需要根据具体情况来...
标题中的“使用P/Invoke来开发用于与串行设备通讯的.NET基类”指的是在.NET环境中,使用C#编程语言,通过平台调用服务(P/Invoke)来直接调用Win32 API,以实现与RS232串行设备的通信。这种方式避免了依赖过时的...
忽略跨线程访问的错误 CheckForIllegalCrossThreadCalls = false,但是这个方法很不稳定,使用invoke方法解决跨线程访问的问题,里边有2个例子, 通过自己额外创建的线程改变label控件中的内容从而验证invoke方法