`
jiangshuiy
  • 浏览: 339255 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于invoke与call的一些观点

 
阅读更多

       在编程或阅读源码时,经常会碰到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的区别

    ### Invoke与BeginInvoke的区别 #### 一、基本概念 在.NET框架中,`Invoke` 和 `BeginInvoke` 是两个常用的方法,主要用于实现跨线程访问控件或执行操作。这两种方法通常出现在多线程编程场景中,特别是当涉及到UI...

    C#窗体中Invoke和BeginInvoke方法详解

    在探讨C#窗体中`Invoke`和`BeginInvoke`方法的使用及其重要性之前,我们首先需要理解.NET框架下的多线程与GUI操作的基本原则,以及为何这两者在跨线程更新GUI时不可或缺。 #### 一、为什么Control类提供了Invoke和...

    invoke_call:Ruby包裹的命令行工具,用于拨打SIP电话

    $ cd invoke_call $ bundle update $ bundle install $ rake build $ gem install pkg/invoke_call-0.1.0.gem 编译必要的二进制文件 $ rake compile_binaries 可能(可能)会发出大量警告。 只要它不会失败,一切都...

    C# Invoke调用Demo

    综上所述,"C# Invoke调用Demo"是一个关于如何在多线程环境中安全更新UI的实例,通过`Invoke`或`BeginInvoke`确保后台线程的操作在UI线程上下文中执行。这些技术在开发高性能和响应式的Windows Forms应用时至关重要...

    P/Invoke Interop Assistant交互助手

    总的来说,P/Invoke Interop Assistant是.NET开发者与非托管世界交互时的重要辅助工具,它简化了接口定义,提高了开发效率,也降低了因类型不匹配导致的运行时错误。熟悉并合理使用这个工具,对于进行跨平台或混合...

    p/Invoke.net工具

    《P/Invoke.NET工具详解:实现托管代码与非托管代码的无缝交互》 在软件开发过程中,有时我们需要在.NET Framework的托管代码环境中调用非托管的C/C++库或者WinAPI函数,这时就需要借助P/Invoke(Platform Invoke)...

    Invoke-and-BeginInvoke.rar_The Difference_invoke

    3. **回调和事件处理**: `BeginInvoke`通常与回调函数一起使用,因为它的异步特性意味着你不能立即获取到方法执行的结果。你可以传递一个委托作为参数,这个委托将在UI线程上被调用,用来处理操作完成后的逻辑。而`...

    P/Invoke Interop 助手

    P/Invoke Interop Assistant,它支持托管代码和非托管代码之间的方法签名的转换,而且直接生成相关的C#或者是VB的方法调用代码。这个签名的转换,不只是适用于Windows的方法签名,只要给定一个C头文件,就可以转换...

    Invoke反射

    反射允许程序在运行时检查自身的信息,并且能够动态地创建对象、调用方法、访问属性和字段,以及执行其他与类型相关的操作。 在.NET中,每个类型都包含有关其成员(如方法、属性和事件)的信息。当你有一个类型的...

    Invoke和BeginInvoke对比介绍

    就Invoke和BeginInvoke进行对比介绍,穿插了一些例子在里面

    P/Invoke Interop Assistant

    在.NET框架中,与非托管代码(如C++编写的动态链接库DLL)交互是一个常见的需求,这就是P/Invoke(Platform Invoke)技术的用武之地。P/Invoke Interop Assistant是微软提供的一款工具,专门用于帮助开发者更方便地...

    Invoke-WCMDump结合powershell进行密码获取

    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.tar.gz

    《Python库Invoke 0.11.0深度解析》 在Python的世界里,库是开发者的重要工具,它们提供了丰富的功能,极大地提高了开发效率。今天我们要深入探讨的是一个名为`invoke`的库,版本号为0.11.0,它是一个强大的任务...

    AutoCAD .NET ARX Invoke的应用

    AutoCAD .NET ARX Invoke是AutoCAD开发中的一个重要概念,主要涉及到使用.NET Framework与AutoCAD的ARX(Acad Runtime Extension)应用程序之间的交互。在AutoCAD的开发环境中,.NET和ARX是两种不同的扩展机制,前者...

    委托delegate invoke的简单源代码,适合委托初学者!

    `testdelegateinvoke3`、`testdelegateinvoke2`、`testdelegateinvoke`和`testdelegateinvoke.sln`这些文件很可能是包含更多关于委托和`Invoke`使用实例的项目或解决方案。通过查看和运行这些代码,你可以更深入地...

    socket invoke 小例子

    socket 源码程序 包含socket服务端 ,客户端,通过 Networkstream 流 streamReader /streamWriter进行动态获取写入信息。并且使用 委托 invoke ==

    flash与C#通信 CallFunction 出现COM组件错误的处理

    通过以上分析和解决方案,我们可以有效地解决Flash与C#通信过程中出现的`CallFunction`方法错误问题。需要注意的是,在实际开发中还需要考虑到其他潜在的问题,比如跨域限制、权限问题等,这些都需要根据具体情况来...

    使用P/Invoke来开发用于与串行设备通讯的.NET基类

    标题中的“使用P/Invoke来开发用于与串行设备通讯的.NET基类”指的是在.NET环境中,使用C#编程语言,通过平台调用服务(P/Invoke)来直接调用Win32 API,以实现与RS232串行设备的通信。这种方式避免了依赖过时的...

    Invoke跨线程调用的代码

    忽略跨线程访问的错误 CheckForIllegalCrossThreadCalls = false,但是这个方法很不稳定,使用invoke方法解决跨线程访问的问题,里边有2个例子, 通过自己额外创建的线程改变label控件中的内容从而验证invoke方法

Global site tag (gtag.js) - Google Analytics