【问题标题】:Different programming languages possibilities不同的编程语言可能性
【发布时间】:2010-04-20 17:44:46
【问题描述】:

这应该是个很简单的问题。有许多编程语言,编译成机器代码或托管代码。我在高中时第一次开始使用 ASM。汇编器非常好,因为您知道 CPU 究竟是做什么的。接下来,(从我的其他问题中可以看出)我决定学习 C 和 C++。我之所以选择 C,是因为从我读到的内容来看,它是输出最接近汇编程序编写的程序的语言。

但是,我想知道的是,任何其他 Windows 编程语言都可以调用 win32 API 吗?确切地说,就像 C 有其特殊的头文件和用于 win32 api 交互的函数一样,这是否被认为是编程语言的一些重要部分?或者有没有不支持调用win32 API的语言,或者只是使用控制台到IO和一些基本文件IO的功能?因为,对于带有图形输出的 Windows 编程,必须能够访问 win32 API。我知道这个问题可能看起来很傻,但仍然请帮助我,我要求学习。谢谢。

【问题讨论】:

    标签: programming-languages


    【解决方案1】:

    许多不同的语言都有打开和使用 Windows DLL 文件的方法,因此您只需打开包含 API 函数的系统 DLL 并使用它们。

    某些语言(例如 C)通过提供一个包含所有已定义内容的漂亮头文件来帮助您。

    我见过的唯一一种无需事先打开任何库即可直接访问 WinAPI 的语言是一种称为 Purebasic 的 BASIC 方言。

    【讨论】:

    • windows.h 只是让您的程序知道 C:\Windows 中的 DLL 中的内容。当您导入 windows.h 时,您就可以使用 API 函数而无需再搞砸了。使用其他语言时,您可能必须自己手动打开 DLL 文件才能调用其中包含的函数。 printf() 是所有 C 编译器都包含的标准库的一部分。标准库是一个较小的库,其中包含需要跨平台的所有基本内容。 WinAPI 的东西不是跨平台的。
    • 好的,谢谢。我可以再问一个小问题吗?如果标准库是跨平台的,则诸如 printf() 之类的函数在 Windows 或 Linux 编译器中必须相同。因此,Windows 和 Linux 必须都支持它。通过支持,我的意思是分配控制台来处理并与之进行相同的通信。但我认为控制台应用程序和 GUI win32 项目之间的唯一区别是控制台应用程序在启动时自动分配控制台。所以我认为甚至像 printf() 这样的函数也是特定于平台的。因为,例如 Dos 使用 int 21h 进行输出,而我认为 Linux 使用的是 int 80h。
    • 是的,Windows 控制台应用程序确实使用 WinAPI 分配一个控制台,该控制台在启动时立即打开(如果没有从另一个控制台调用)。然而,在 linux 上,它没有,您必须从终端窗口调用程序(一旦为该平台编译)。同样对于输入/输出的东西,不要担心硬件,考虑在 stdin/stdout/stderr 等流中进行通信。这从硬件细节中抽象出来并允许跨平台编程。
    • 谢谢。但是,我是因为我想更深入地研究计算机。我想我知道硬件是如何工作的,因为我们在学校有 CPU 架构(首先是 8051,而不是 x86,从 8086 到 Pentium 1)每周 7 个小时,持续了大约 10 个月。所以现在我只是在收集有关操作系统如何实际使用这个硬件的可能性的信息。我主要使用谷歌,但有时我找不到我需要知道的内容..
    【解决方案2】:

    你是问如何从程序集中调用 Win32 吗?

    只需使用 MASM(或 TASM,或...)

    hello world 调用 Win32 示例:

    ==== HelloWin.asm ==============================
    .586
    .model flat, stdcall
    
    EXTERN MessageBoxA@16:NEAR
    
    .data
    szCaption db 'Hello World',0
    szAppName db 'HelloWorld',0
    
    .code
    start:
    push 0
    push offset szCaption
    push offset szAppName 
    push 0
    call MessageBoxA@16
    ret
    
    end start
    ===================================================
    

    组装:

    ml.exe /coff /c HelloWin.asm

    链接:

    链接 /subsystem:windows HelloWin.obj /defaultlib:C:\masm32\lib\user32.lib

    【讨论】:

      【解决方案3】:

      我使用 Windows API 的第一种语言是 VB4。是的,大多数语言都可以通过某种方式访问​​ API。

      【讨论】:

        【解决方案4】:

        Win32 功能可用于 C、C++、VB、VB .net 和 C#。在后两者中,您通常使用不错的 CLR 库,但如果您知道正确的语法糖,则可以直接调用本机(非托管)API。

        Win32 的使用不限于以上列表。它是一个 C API 是有原因的:因此任何本质上知道如何进行正确函数调用的语言都可以调用它们。在这种情况下,“正确的类型”是stdcall。所有语言的编译器(或其他)所要做的就是加载正确的 DLL,以正确的顺序将参数(和其他信息)压入堆栈,然后就可以开始了。

        【讨论】:

          猜你喜欢
          • 2011-01-26
          • 2011-05-06
          • 1970-01-01
          • 2015-09-06
          • 2012-02-21
          • 2012-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多