2017-12-26 10 views
2

Ich bin dabei, C++ und Assembler auf Windows 10 zu schreiben. Ich beginne mit x64 asm auf dem Desktop, dann möchte ich ARM asm auf Win 10 ausprobieren IOT-Kern.Univeral Windows Platform C++ mit x64 Assemblersprache

Das Projekt wird in der Regel erhebliche Menge an C++ - Code und einigen Assembler-Code haben, aber ich werde sehen, wo es geht. Warum Montage verwenden? Rein zum Spaß. Dieses ganze Projekt ist ein Hobby, um wieder in C++ und Assembly zu kommen.

UWP C++ scheint der Weg zu sein, d. H. Neueste Microsoft-Programmiertechnologie. Windows Desktop C++ (d. H. Win32 oder Konsole) wird weiterhin unterstützt, aber ich bleibe lieber bei UWP.

Ich hatte eine kurze Lektüre über UWP C++, lerne die Grundlagen von XAML und C++ kommt zu mir zurück (ich hatte es seit Jahren nicht mehr berührt).

Verwenden von Visual Studio Professional (mit Masm unter der Haube) und X 64 Asm.

Ich habe eine einfache Hello World-Anwendung. Ein Textfeld und eine Schaltfläche. Das Projekt enthält eine .asm-Datei, die eine einfache Funktion enthält, die zwei Zahlen addiert und das Ergebnis in rax zurückgibt. Diese (asm) -Funktion wird im click-click-Ereignis aufgerufen und an den Textfeldtext ausgegeben.

MainPage.xaml.cpp

extern "C" int SomeFunction(); 

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

MainPage.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> 

TestASM.asm

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

Ferner info ...

  • Das Projekt Build-Abhängigkeiten hat die Option masm (d. h. Auf).
  • UWP C++ kompiliert nativen Code, so sollte es asm-Dateien
  • Leider Informationen über UWP und asm scheint nicht vorhanden zu sein (keine Überraschung hier)

Das Problem akzeptieren: Ich bin immer ein „nicht aufgelöste externe“ Fehler

Hilfreiche Tipps

  • Intellisense die Funktionsdefinition auf der extern-Deklaration ist Hinting für meine (asm) Funktion nicht gefunden wird.
  • Ich kann jeden Müll in der ASM-Datei eingeben und das Projekt wird erfolgreich kompiliert.

Mit diesen Punkten ist es sehr offensichtlich, dass das Projekt meine asm-Datei nicht findet. Ich bin mir nicht sicher, wie man eine asm Akte einschließt. Und ich vermute extern ist ein Rest der Win32 C++ Tage und vielleicht kann nicht in UWP verwendet werden.

Jede Hilfe wird sehr geschätzt.

+0

Versuchen Sie, die Eigenschaften für Ihre ASM-Datei im Solution Explorer anzuzeigen. Insbesondere suchen Sie, ob "Aus Build ausgeschlossen" auf * yes * oder der "Elementtyp" auf etwas anderes als * Microsoft Macro Assembler * gesetzt ist. –

+0

@DavidWohlferd Das war's !!! Das Problem war, dass diese Eigenschaften leer waren. Setzen Sie diese entsprechend (wie Sie empfohlen haben) behoben. Ich danke dir sehr! Ich hatte einen halben Tag damit verbracht, ein paar Sachen zu suchen und auszuprobieren. Bitte posten Sie Ihren Kommentar als Antwort und ich werde ihn als korrekt markieren. –

+0

Müssen Sie normalerweise '_SomeFunction' nicht als den Namen für Ihre Funktion verwenden, um mit Compiler-generiertem Code unter Windows zu verknüpfen? Oder macht der Assembler von MS diesen Namen für Sie? Oder enthält UWP eine neue ABI, in der den C- und C++ - Symbolnamen in den Objektdateien überhaupt kein _ _ vorangestellt ist? –

Antwort

1

Abhängig von der Reihenfolge, in der Sie bestimmte Vorgänge ausführen, können bestimmte Eigenschaften für asm-Dateien im VS Solution Explorer nicht richtig eingestellt werden.

Gemeinsame Lösungen umfassen das Entfernen/Wieder Hinzufügen der asm-Datei aus der Lösung Explorer oder manuell Excluded from Build-keine und Item Type-Microsoft Macro Assembler für jede Build-Konfiguration einrichten.

+0

Neustart des Computers funktioniert nicht? ;-) –

+0

Ja, setze die Project Build Dependencies (Option "masm"), bevor du .ASM-Dateien zum Projekt hinzufügst. –

Verwandte Themen