酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

WindowsストアアプリでC++/Cxで作ったネイティブライブラリをプラットフォームによって参照するdllアセンブリを切り替えたい

大昔にWindowsストアアプリとWindows Phone 8向けにOpenCVを移植してみたのですが、Surface RT(ARM)向けとパソコン(x86)向けではCPUアーキテクチャが異なるため、同じネイティブライブラリを使うことができません。

……ということで、本記事ではプラットフォームごとによって、異なる参照するdllアセンブリを切りかえてみましょう。

ARM用・x86用は、それぞれlibフォルダの直下のarmフォルダ・x86フォルダに格納しています。

  • ARM向けのアセンブリ
    • \lib\arm\OpenCV.winmd
  • x86向けのアセンブリ
    • \lib\x86\OpenCV.winmd

Visual Studio 2012のGUIで設定を変更することはできず、csprojファイルをエディタ等で直接編集する必要があります。

<Reference Include="OpenCV">
  <HintPath Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">.\lib\arm\OpenCV.winmd</HintPath>
  <HintPath Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">.\lib\arm\OpenCV.winmd</HintPath>
  <HintPath Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">.\lib\x86\OpenCV.winmd</HintPath>
  <HintPath Condition="'$(Configuration)|$(Platform)'=='Release|x86'">.\lib\x86\OpenCV.winmd</HintPath>
</Reference>