USBプロジェクト - サンプル・ソフトへの長すぎた道のり (挫折編) [USB]
ソースコードがあるからと、気軽に手を出したのですが。
CLRとは、なんぞや?
サンプル・プログラム同様にフォーム上のボタンを操作してLEDを制御するモデルを考えていたので、 GUIつきの空プロジェクトを作ろうと考えました。 いくつかプロジェクトを作成してみて、 Visual C++ Express Editionでフォームが出てくるのは、「新規作成→Visual C++→CLR→Windowsフォーム・アプリケーション」だけだったので、これを雛形として使います。
あとは、"hid_dev.cpp"などのソース・コードと"hid-lib"に入っているファイルをコピーしました。 まだ、"hid_dev.cpp"内の関数を使用するプログラムは書いていません。 これを度胸一発、ビルドすると、
warning LNK4248: 未解決の typeref トークン (0100001C) ('_HIDP_PREPARSED_DATA') です。イメージを実行できません。
をはじめとして、沢山のエラーが出てきました。 これは、ライブラリが指定されていないからだと考え、「プロパティ・ページ」の「リンカ;追加のライブラリ・ディレクトリ」に"hid-lib"ディレクトリを追加しましたが、状況は変わらず。
エラーメッセージを頼りに検索をかけた結果、 "__clrcall"関数から"__stdcall"関数を呼び出しているのが気に入らないご様子。 何ですか?"CLR"って?
敗北宣言
そもそも、英語でもわからないエラーメッセージが、日本語にするともっとわけがわからなくなるので、 英語版のメッセージを探しに行きました。
unresolved typeref token (token) for 'type'; image may not run
前方参照された「型」が気に入らないということなので、"_HIDP_PREPARSED_DATA"が あらかじめ正しく定義されていれば問題ないようです。 でも、この型の宣言がまったく見つかりません。 だいたい、これはリンカのエラーだよな。
というわけで、 現在のGUIベースプログラムと太古のデバイスドライバを組み合わせて使うのは、 割りに合わない労力が必要だと判断して、このあたりでやめます。 早い話、敗北宣言です。
それにしても、 古いソース・コードが通らなくなるような、改造はやめて欲しいな。
収穫が無いわけじゃない
今回の調査で、現代風にUSBデバイスをユーザレベルのプログラムで操作する方法として、 "WinUSB"という概念があることがわかりました。 UUBSDみたいなものが肥大化を続ける自称オペレーティング・システムに入るという事かな? こちらは、VB2005でのサンプルというものがみつかったので、敗北感から立ち直ったら、試してみます。
>CLRとは、なんぞや?
.NETにC/C++の皮をかぶせた物で、基本的にC#.NETやVB.NETと同じ階層でプログラミングするモード・・・というか言語です。
出力されるバイナリも、x86やx64のネイティブコードではなく、基本的に.NET用仮想機械語であるMSILを出力するようになっています。
CLRではMSILとネイティブコードを混在させて扱う事が可能ですが、ネイティブコードで出力したいソースコード・関数にはその指定をしなければなりません。
なまじC++と付いているだけに勘違いしやすいですが、CLRはネイティブなC++では有りません。
なので
>古いソース・コードが通らなくなるような、改造はやめて欲しいな。
は、ほぼ言いがかりになってしまうかと思います。
CLRプロジェクトしか扱えないエディションであっても、cl.exe(コンパイラ)等は使用可能ですので、コマンドライン又はMakefileやバッチファイルなどでコンパイルすれば問題ありません。
あと、詳しくは知りませんがSDKやDDKにVisualStudioのモジュールが含まれてるとかなんとかで、Expressと組み合わせるとなかなか強力らしいです。
MFC周りは単純に有償ライブラリってことで諦めるほかありませんが・・・
by とおりすがり (2011-08-24 07:50)