カスタマイズ‎ > ‎SDS‎ > ‎

ADSの移植

SDS は ADS の関数名については互換性がありますが、文字列の扱いについてはUNICODE仕様になっているため、変更が必要になります。
また、サポートされていない部分もありますので、移植時には、結果を必ず確認してください。


移植時のポイント

■ ライブラリ

SDSモジュールを開発するためには、ODA DwgDirect ライブラリが必要になり、現在、Bricscad (V11)で使用されている ODA DwgDirect ライブラリ は Ver2.06 となります。
このライブラリを入手されている場合のみ移行可能となります。

■ プロジェクト

ADSモジュールを開発するためのコンパイラは、Visual C++ 6.0 になります。SDSモジュールを開発するためのコンパイラは、Visual C++8.0(SP1~) になりますので、プロジェクトは Visual C++8.0(SP1~) で作成し直す必要があります。

■ 文字列

ADSでは文字は ANSI となりますが、SDSでは UNICODE となります。文字定数や文字変数については、UNICODE対応の型に変更し、文字を扱う関数については、UNICODE仕様の関数に変更する必要があります。

例えば、ADS の以下のようなコードの場合

char szMsg[128];
sprintf( szMsg, "\nシステム変数 [SNAPMODE] の値は <%d> です。", rb.resval.rint);
ads_printf( szMsg );

SDSでは以下のように変更します。

wchar_t szMsg[128];
swprintf( szMsg, L"\nシステム変数 [SNAPMODE] の値は <%d> です。", rb.resval.rint);
ads_printf( szMsg );

または、プロパティの[構成プロパティ]-[全般]-[文字セット]の設定が「Unicode 文字セットを使用する。」となっている場合は、TCHAR の汎用関数に変更できます。

TCHAR szMsg[128];
_stprintf( szMsg, _T("\nシステム変数 [SNAPMODE] の値は <%d> です。"), rb.resval.rint);
ads_printf( szMsg );

■ LISP関数の登録方法

ADSでは、main()関数にて、ads_link() を監視し、その戻り値を判断し、LISP関数の登録や実行、開放を行ないます。SDSでは、acrxEntryPoint() にて、その引数値を判断し、LISP関数の登録や実行、開放を行ないます。
このモジュールの導入部分については書き換えが必要となります。

以下に LISP 関数 (test1) および (test2) を登録する部分のサンプルソースがあります。ご参考にしてください。

■ システム変数

Bricscadでは、AutoCADの持つシステム変数の中でサポートしていないものがあります。
また、サポートはしているが、AutoCADでは読み書きできるが、Bricscadでは読み込み専用になっているものもあります。
ads_setvar()関数やads_getvar()関数を使っている部分について、システム変数の有無などを確認してください。

例えば、
システム変数[DTextEd](AutoCAD2010以降)はサポートしていません。
システム変数[SDI]は、Bricscadでは読み込み専用のシステム変数となり、常に [0] を返します。

■ コマンド

Bricscadでは、AutoCADの持つコマンドの中でサポートしていないものがあります。
また、サポートはしているが、AutoCADとは引数やオプションが異なるものもあります。
ads_command()関数やads_cmd()関数を使っている部分について、コマンドの有無などを確認してください。

例えば、
コマンド[MLine]はサポートしていません。
コマンド[SaveAs]では、テンプレートとして保存するためのオプション[T]や標準仕様として保存するためのオプション[S]はサポートしていません。