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.
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. –
@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. –
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? –