2017-12-26 28 views
2

Windows 10でC++とアセンブリ言語を調べています。デスクトップ上でx64 asmを使い始めてから、トラックの下でWindows 10でARM asmを試してみたいと思いますIOTコア。ユニバーサルWindowsプラットフォームx64アセンブリ言語を使用したC++

プロジェクトには、通常、かなりの量のC++コードといくつかのアセンブリ言語コードがありますが、どこに行くのか分かります。なぜアセンブリを使用するのですか?純粋に楽しい。このプロジェクト全体は、C++とアセンブリに戻る趣味です。

UWP C++が最新のマイクロソフトプログラミングテクノロジに移行する方法のようです。 WindowsデスクトップC++(Win32やコンソール)は引き続きサポートされていますが、私はUWPに固執したいと思います。

私はUWP C++で素早く読んだことがあります.XAMLの基礎を学んでいて、C++が私に戻ってきています(私は何年も触れていませんでした)。

Visual Studio Professional(masmを使用)とx64 asmを使用します。

私は単純なHello Worldアプリケーションを持っています。テキストボックスとボタン。プロジェクトには、2つの数値を加算して結果をraxに返す単純な関数を含む.asmファイルが含まれています。この(asm)関数は、ボタンクリックイベントで呼び出され、テキストボックステキストに出力されます。

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 

また情報...

  • プロジェクトビルドの依存関係には、masmオプションがチェックされています。に)。
  • UWP C++はネイティブコードにコンパイルので、それは
  • は残念ながらUWPとASMの情報が存在しないことのようです(ここでは驚き)

問題をASMファイルを受け入れるべきではない:私は取得しています「未解決の外部」エラー

役立つヒント

  • インテリセンスが私の(ASM)関数のextern宣言の関数定義をほのめかしているが見つかりません。
  • 私はasmファイルにガベージを入力することができ、プロジェクトは正常にコンパイルされます。

これらの点を念頭に置いて、プロジェクトでは自分のファイルを見つけることができません。私はasmファイルをどのようにインクルードするのか分かりません。そして、私はexternがWin32 C++の日の残りで、おそらくUWPで使うことができないと思う。

ご迷惑をおかけして申し訳ありません。

+0

ソリューションエクスプローラでasmファイルのプロパティを調べてみてください。具体的には、 'Excluded from Build'が* yes *に設定されているか、または 'Item Type'が* Microsoft Macro Assembler *以外に設定されているかどうかを調べることです。 –

+0

@DavidWohlferdそれはそれです!問題は両方ともこれらのプロパティが空白に設定されていたことです。これらを適切に設定すると(あなたがアドバイスしたように)修正されました。どうもありがとうございます!私は半日を見て、たくさんのものを試していました。あなたのコメントを回答として投稿してください。私はそれを正しいものとしてマークします。 –

+0

通常、Windows上でコンパイラが生成したコードにリンクするために関数のasm名として '_SomeFunction'を使用する必要はありませんか?あるいは、MSのアセンブラはあなたのために名前を変えますか?あるいは、UWPには新しいABIが含まれていますが、CおよびC++のシンボル名の前にオブジェクトファイルの '_ 'という接頭辞が付きませんか? –

答えて

1

順序によっては、VS Solution Explorerのasmファイルの特定のプロパティが正しく設定されないことがあります。

一般的な解決策は、削除/再追加し、各ビルド構成のためExcluded from BuildからなしへとItem Type Microsoftマクロアセンブラを設定し、手動でソリューションエクスプローラからのasmファイルを、または含まれています。

+0

コンピュータを再起動しませんか? ;-) –

+0

はい、プロジェクトに.asmファイルを追加する前にプロジェクトビルドの依存関係(masmオプション)を設定します。 –

関連する問題