20: 2013-03-29 (金) 15:52:51 takaboo[6] [7] | 21: 2013-03-30 (土) 18:27:17 takaboo[6] [8] | ||
---|---|---|---|
Line 123: | Line 123: | ||
****DLLの静的リンク [#la562acf] | ****DLLの静的リンク [#la562acf] | ||
- | 静的にDLLを使用する場合は以下の手順でDLLをリンクする指定を行った上でコンパイルします。なお、コンパイル後のファイルを実行する際にDLLが同一のフォルダに存在しないと、プログラムは起動直後に異常終了してしまいます。 | + | 静的にDLLを使用する場合は以下の手順でDLLをリンクする指定を行った上でコンパイルします。なお32bit環境を前提とします。 |
+ファイルの準備~ | +ファイルの準備~ | ||
~ダウンロードファイルを解凍後、コンパイルするソースファイルと同一フォルダに以下のファイルをコピー~ | ~ダウンロードファイルを解凍後、コンパイルするソースファイルと同一フォルダに以下のファイルをコピー~ | ||
Line 141: | Line 141: | ||
****DLLの動的リンク [#y15bf22f] | ****DLLの動的リンク [#y15bf22f] | ||
- | 動的にDLLを使用する場合はライブラリの追加登録やオプションの指定は必要ありませんが、ソース中でdxlib.hをインクルードする前に_DYNAMICLOADマクロを定義しておきます。 | + | 動的にDLLを使用する場合はDLL事態をコンパイラオプションへ追記する必要はありません。その代わりにソース中でdxlib.hをインクルードする前に_DYNAMICLOADマクロを定義しておきます。 |
#define _DYNAMICLOAD | #define _DYNAMICLOAD | ||
#include "dxlib.h" | #include "dxlib.h" | ||
これによりヘッダファイル内の諸定義が切り替わり、DLLのロード及びアンロードを行うLoadDLLとUnloadDLLが利用できるようになります。 | これによりヘッダファイル内の諸定義が切り替わり、DLLのロード及びアンロードを行うLoadDLLとUnloadDLLが利用できるようになります。 | ||
+ | TDeviceID dev; | ||
+ | // DLLをロード | ||
+ | if (LoadDLL ()) { | ||
+ | if ((dev = DX_OpenPort (COMPORT, BAUDRATE))) { | ||
+ | ... | ||
+ | DX_ClosePort (dev); | ||
+ | } | ||
+ | // DLLをアンロード | ||
+ | UnloadDLL (); | ||
+ | } | ||
***Microsoft Visual C++ [#j5a74d33] | ***Microsoft Visual C++ [#j5a74d33] | ||
Line 173: | Line 183: | ||
'SampleCode\DELPHI'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。~ | 'SampleCode\DELPHI'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。~ | ||
[[DELPHI:http://www.embarcadero.com/jp/products/delphi]]はPASCAL言語によるPC向け開発ツールであり、外部のDLLへ容易にアクセスする事が出来ます。サンプルに含まれるDXLIB.pas内にdxlib_x32.dllないしdxlib_x64.dllを動的にロードする関数を用意しましたので、ユーザソースのuses節にdxlibを追記すればDynamixel Libraryの各APIへ簡便にアクセスできます。 | [[DELPHI:http://www.embarcadero.com/jp/products/delphi]]はPASCAL言語によるPC向け開発ツールであり、外部のDLLへ容易にアクセスする事が出来ます。サンプルに含まれるDXLIB.pas内にdxlib_x32.dllないしdxlib_x64.dllを動的にロードする関数を用意しましたので、ユーザソースのuses節にdxlibを追記すればDynamixel Libraryの各APIへ簡便にアクセスできます。 | ||
+ | |||
+ | ***VB [#p8d7963b] | ||
+ | 'SampleCode\EXCEL'フォルダにサンプルが同梱されます。~ | ||
+ | ここではVBと似たMicrosoft OfficeのVBAを使用し、マクロの標準モジュールにDXLIB2HEADという名称でDLLに含まれるいくつかのAPIを定義しました。~ | ||
+ | Module1にPingTestとMotorTestというマクロを記述しましたので、ワークシートから適宜マクロを呼び出して実行してください。結果がシート上に反映されます。 | ||
***Ruby [#r63b1e3e] | ***Ruby [#r63b1e3e] | ||
Line 197: | Line 212: | ||
[[MATLAB:http://www.mathworks.co.jp/products/matlab]]からの使用例を紹介します。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して下さい。~ | [[MATLAB:http://www.mathworks.co.jp/products/matlab]]からの使用例を紹介します。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して下さい。~ | ||
+事前準備 | +事前準備 | ||
- | ~まずはMATLAB起動後、「ファイル(F)」→「パス設定(H)」でdxlib_x32.dllとdxlib_matlab.hの格納されたパスを指定します。dxlib.hはMATLABで解釈しづらいため使用しないでください。 | + | ~まずはMATLAB起動後、「ファイル(F)」→「パス設定(H)」でdxlib_x32.dllとdxlib_matlab.hの格納されたパスを指定します。dxlib.hはMATLABでは解釈できない記述が多いため使用しないでください。 |
+DLLのロード | +DLLのロード | ||
- | loadlibrary('dxlib_x32.dll','dxlib_matlab.h','alias','dxlib'); | + | loadlibrary('dxlib_x32.dll','dxlib_matlab.h','alias','dxlib') |
+ポートのオープン | +ポートのオープン | ||
~ロードされたdxlibのDX_OpenPortを呼出します。関数名の後はポートとボーレートです。 | ~ロードされたdxlibのDX_OpenPortを呼出します。関数名の後はポートとボーレートです。 | ||
- | devid = calllib('dxlib','DX_OpenPort','\\.\COM3',1000000); | + | devid = calllib('dxlib','DX_OpenPort','\\.\COM3',1000000) |
+TErrorCodeの取得 | +TErrorCodeの取得 | ||
- | ~TErrorCodeはポインタで引き渡している為、事前に型宣言をしておきます。値はErr.Valueで取得可能です。 | + | ~TErrorCodeはポインタで引き渡しているため、事前に型宣言をしておきます。値はErr.Valueで取得可能です。必要なければ0を指定しても構いません。 |
Err = libpointer('uint16Ptr', 0); | Err = libpointer('uint16Ptr', 0); | ||
Ret = calllib('dxlib', 'DX_Ping', devid, 1, 10, Err); | Ret = calllib('dxlib', 'DX_Ping', devid, 1, 10, Err); | ||
Line 210: | Line 225: | ||
+ポートのクローズ | +ポートのクローズ | ||
~DX_OpenPortを行ったので、DX_ClosePortを使用してポートを閉じます。 | ~DX_OpenPortを行ったので、DX_ClosePortを使用してポートを閉じます。 | ||
- | calllib('dxlib','DX_ClosePort',devid); | + | calllib('dxlib','DX_ClosePort',devid) |
+DLLのアンロード | +DLLのアンロード | ||
- | unloadlibrary('dxlib'); | + | unloadlibrary('dxlib') |
***Linux [#w5c096b8] | ***Linux [#w5c096b8] |
(This host) = https://www.besttechnology.co.jp