So-net無料ブログ作成

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でのサンプルというものがみつかったので、敗北感から立ち直ったら、試してみます。


nice!(0)  コメント(1)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 1

とおりすがり

>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) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。