モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

FileNotFound 問題 (C++/CX の winmd を参照して C#/VB/JS から利用する)

 おはようございますー!! いやぁ、衝撃の事実、長年の問題の解決。

f:id:mntone:20140219102304p:plain

概要

  1. C++/CX でライブラリーを作成
  2. C# から参照。あれ、、例外…?
  3. ほかの言語は?

1. C++/CX でライブラリーを作成

 まず、簡単なコード書きましょうか。

#pragma once

namespace Calc
{
public ref class Class1 sealed
{
public:
Class1() { }
uint32 Add( uint32 x, uint32 y ) { return x + y; }
};
}

 これで Windows Runtime component を作成してみます。まあさすがにこの程度は C++/CX を理解していなくてもわかると思います。

2. C# から参照。あれ、、例外…?

 こんな感じに参照します。

f:id:mntone:20140219102850p:plain

f:id:mntone:20140219103038p:plain

 では実行してみましょう。

f:id:mntone:20140219102304p:plain

 /(^o^)\

 はい、これは当たり前です。winmd 参照だと自動で C++ のランタイムを追加してくれないので、その「C++ ランタイム」のファイルがみつからねーよ! ってほざかれます (ダイナミックロード)。

 なので追加します。

f:id:mntone:20140219103441p:plain

 以上で完了です。問題なく実行できます。

 これで、

などの C++/CX で書かれたものが C# などから利用できます!

3. ほかの言語は?

 Visual Basic は同じ手順踏めばいけます。

 JavaScript の場合「参照設定」ではなく「参照」となっていますが、同じ手続きを踏めば使えるようになります。

 意外な落とし穴でした。てかプロジェクトをリンクすると自動でこういうのが追加されていたのね… 知らなかった。だからこの追加しないといけないっていう情報は MSDN でも全然乗ってなくて、いろいろネット検索かけてたら、Player Framework のところにこれが乗ってたから試してみたってわけ。

まとめ

 忘れないように心に留めておきたい。これ、何か月も悩んでたんだよ…? おわり