FC2ブログ

FreeBASIC 学習:ヘッダファイル変換ツール fbfrog

2019-07-20 :  PCクリニック
前回(2019-07-17)の記事:
FreeBASIC 学習:ヘッダファイル変換ツール h_2_bi」では、
h_2_bi.basが何故か使えなかった。


それで、
「FreeBASIC h_2_bi」で更に検索していたら、・・・・・


Creating FB bindings for C libraries - FreeBASIC
を見つけた。

  Creating FB bindings for C libraries

  This page aims to document the problems and solutions commonly
   encountered when creating FB bindings for C libraries.

  In general, FB and C/C++ are very similar.
  FB follows the same ABI as GCC where applicable,
   in order to be binary-compatible as much as possible.
  The language syntax is also similar to C/C++.
  As a result, a lot of type and procedure declarations can be translated
   directly 1:1 between C and FB.
  However, there also are constructs which cannot be translated directly,
  for example: typedefs declaring function types.
  FB has function pointer types, but not plain function types.

   ・The good news: We have tools (fbfrog and h_2_bi) which can do
     most of the translation automatically.
   ・The bad news: There always are some problems which cannot be solved
     automatically and thus need to be fixed manually.

  ・・・・・
  ・・・・・

=====

  Cライブラリ用のFBバインディングの作成

  このページは、Cライブラリ用のFBバインディングを作成するときによく
   遭遇する問題と解決策を文書化することを目的としています。

  一般に、FBとC / C ++はよく似ています。
  可能な限りバイナリ互換にするために、
   FBは、該当する場合はGCCと同じABIに従います。
  言語構文もC / C ++に似ています。
  その結果、CとFBの間で多くの型と手続きの宣言を
   直接1:1に変換できます。
  ただし、直接変換できない構造体もあります。
  たとえば、typedefは関数型を宣言します。
  FBには関数ポインタ型がありますが、普通の関数型はありません。

   ・良いニュース:ほとんどの翻訳を自動的に行うことができる
     ツール(fbfrogとh_2_bi)があります。
   ・悪いニュース:自動的に解決できない問題が常にあり、
     手動で解決する必要があります。

  ・・・・・
  ・・・・・



  上記の fbfrog リンク:「Board index > FreeBASIC > Projects
に行くと、

  fbfrog header translator
   by dkl > Oct 22, 2011 1:53

  github.com/dkl/fbfrog

  fbfrog is a command line tool that reads *.h files (C API declarations)
   and generates a corresponding *.bi file (FreeBASIC API declarations).
  It's intended to automate most of the work needed to create and
   maintain FB bindings for C libraries.
===
  fbfrogは、*.hファイル(C API宣言)を読み込み、対応する * .biファイル
   (FreeBASIC API宣言)を生成するコマンドラインツールです。
  これは、Cライブラリ用のFBバインディングを作成および維持するために必要な
   作業の大部分を自動化することを目的としています。

とあったので、
  github.com/dkl/fbfrog
にいった。

そこで、緑色の[Clone or download]ボタンで、
  「fbfrog-master.zip」2017/12/11 付 692KB
をダウンロードして、

 /src/ 内のファイルのみ 44ヶと、
 /include/fbfrog/ 内3ファイル(これはイラナイ?)
で、

  fbc *.bas -m fbfrog

として、「fbfrog.exe」を作った。


出来たfbfrog.exeを使って、

  fbfrog cv2.h

とすると、「cv2.bi」が出来た。



そこで、

生成された .bi ファイルを確認



この「cv2.h」の場合では、

  [ 1/23] linux-x86
  ・・・・・
  [23/23] dos
      cv2.h
  emitting: cv2,bi (30 declarations, 1 TODO)

だった。


「cv2.bi」の中身を見ると、

  TODO が1つあった。 ← これは取り敢えずコメントアウトした。


他に、

  予約語となっている(?) type が変数名に使われているので変更した。


更に、

  #if があったので、この辺りもコメントアウトした。


そこで、
今変換できた「cv2.h」を使って、
前々回(2019-07-13)の記事:
FreeBASIC 学習:OpenCV 使えた」で書いたコードを、
書き直してみた:
#include "cv2.bi"           ' fbfrog で変換し、手直ししたもの

#inclib "opencv_world300" ' リンク用にコピー
' ---------------------------------------------
dim img as CvMat ptr
dim as long xx, yy
dim B as ubyte ptr

img = cvLoadImageM( "test.tif", 0 ) ' 0 : GrayScale で読込む

yy = img->yy: xx = img->xx: B = img->Byte

print yy, xx ' 行数、列数
print *B, *(B+(xx-1)), *(B+(xx*(yy-1)+xx-1)) ' 画素値3つ
これで動いた。
OKダ。



本日はここまで。


FreeBASIC 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒

190422
関連記事
スポンサーサイト



コメントの投稿

管理者にだけ表示を許可する

人気blog Ranking



最新記事
カレンダー
07 | 2021/08 | 09
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

FC2 / i2i / Google




Google Analytics
ブックマーク