繁体   English   中英

具有 x64 汇编语言的通用 Windows 平台 C++

[英]Univeral Windows Platform C++ with x64 assembly language

我正在考虑在 Windows 10 上使用 C++ 和汇编语言。我从桌面上的 x64 asm 开始,然后我想在 Win 10 IOT Core 上尝试 ARM asm。

该项目通常会有大量的 C++ 代码和一些汇编语言代码,但我会看到它的去向。 为什么要使用汇编? 纯粹是为了好玩。 整个项目是一个爱好回到 C++ 和汇编。

UWP C++ 似乎是要走的路,即最新的微软编程技术。 仍然支持 Windows 桌面 C++(即 Win32 或控制台),但我宁愿坚持使用 UWP。

我快速阅读了 UWP C++,没有学习 XAML 的基础知识,而 C++ 又回到了我的身边(我已经很多年没有接触过它了)。

使用 Visual Studio Professional(引擎盖下的 masm)和 x64 asm。

我有一个简单的 Hello World 应用程序。 一个文本框和一个按钮。 该项目包括一个 .asm 文件,其中包含一个简单的函数,该函数将两个数字相加并以 rax 形式返回结果。 这个 (asm) 函数在按钮单击事件中被调用并输出到文本框文本。

主页.xaml.cpp

 extern "C" int SomeFunction();

 void LearningUWPwithCPP::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
    greetingOutput->Text = SomeFunction().ToString();
 }

主页.xaml

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel x:Name="contentPanel" Margin="120,30,0,0">
        <TextBlock HorizontalAlignment="Left" Text="Hello World" FontSize="36"/>
        <TextBlock Text="Click the button"/>
        <Button x:Name="inputButton" Content="Click me" Click="Button_Click"/>
        <TextBlock x:Name="greetingOutput"/>
    </StackPanel>
</Grid>

测试ASM.asm

    .CODE
    SomeFunction PROC
            mov     rax, 5
            add     rax, 6
            ret
    SomeFunction ENDP
            END

更多信息...

  • 项目构建依赖项已选中 masm 选项(即打开)。
  • UWP C++ 编译为本机代码,因此它应该接受 asm 文件
  • 不幸的是,关于 UWP 和 asm 的信息似乎不存在(这里并不奇怪)

问题:我收到“未解决的外部”错误

有用的提示

  • Intellisense 提示未找到我的 (asm) 函数的 extern 声明中的函数定义。
  • 我可以在 asm 文件中输入任何垃圾,项目将成功编译。

有了这些点,很明显该项目没有找到我的 asm 文件。 我不确定如何包含一个 asm 文件。 而且我怀疑 extern 是 Win32 C++ 时代的残余,可能无法在 UWP 中使用。

任何帮助深表感谢。

根据您执行操作的顺序,VS 解决方案资源管理器中 asm 文件的某些属性可能设置不正确。

常见的解决方案包括从解决方案资源管理器中删除/重新添加 asm 文件,或为每个构建配置手动将“ Excluded from Build设置为“无” ,将“ Item TypeMicrosoft 宏汇编程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM