簡體   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