Appmethod 1.15 のリリース ノート

提供: Appmethod Topics
移動先: 案内検索

このリリース ノートには、主な製品ドキュメントに含まれていない可能性のある重要な情報が記載されています。このページのすべての内容に目を通されることをお勧めします。このリリース ノートの最新版については、Appmethod 1.15 のリリース ノート を参照してください。

目次

本製品のインストール、アンインストール、アップグレード

本製品のインストール、アンインストール、アップグレードの前には、Install.htm ファイルおよび License.rtf ファイルをお読みください。Install.htm ファイルには、システムおよび空き領域の要件と、インストールおよびアップグレードの手順が記載されています。 License.rtf はソフトウェア使用許諾およびサポート契約書です。

Install.htm ファイルの最新版は、docwiki の「Appmethod 1.15 のインストール ノート」でご覧いただけます。

Install.htm ファイルにアクセスするには、この他にも以下の方法があります。

  • Installer.zip ファイルを開く。
  • インストール ランチャで[ヘルプ]ボタンをクリックする。
  • 製品のインストール ディレクトリに含まれている Install.htm を開く(このディレクトリは、デフォルトでは以下の場所にあります)。
    C:\Program Files\Embarcadero\Studio\n.n
    • インストール、配置、ライセンスの問題の詳細については、Install.htm、Deploy.htm、License.rtf の各ファイルを参照してください。これらのファイルは、デフォルトで C:\Program Files\Embarcadero\Studio\n.n にインストールされています(64 ビット Windows の場合は Program Files (x86) ディレクトリを使用)。

FireMonkey に関する注意事項

デバイス上で iOS アプリケーションをデバッグなしで実行したあと正常に閉じる/開き直すことができないおそれあり

デバイス上で iOS アプリケーションをデバッグなしで実行したあと、デバイス上でアプリケーションのプロセスを強制終了した場合は、IDE の外部でプロセスを実行するのであれば、PAServer のリセット コマンドを実行する必要があります。それには、PAServer のコマンド プロンプトで「r」と入力します。

フォーム デザイナで新規ビューの作成前にすべてのコンポーネントに名前を割り当てる必要あり

古い FireMonkey アプリケーションを XE7 で開く場合、次のエラー メッセージが出力されるおそれがあります。

 Cannot inherit from form 'FormName". It contains a component with a blank name property.(フォーム "FormNam" から継承できません。名前が未指定のプロパティを持つコンポーネントが含まれています。)

新しいビュー継承システムでは、フォーム デザイナで新規ビューを作成するには、まず、すべてのコンポーネントに名前を割り当てる必要があります。

Appmethod C++ に関する注意事項

エクスポートされるクラスのテンプレート メンバの明示的なインスタンス化とエクスポート

テンプレート メンバ関数を含んだクラスを(__declspec(dllexport) 指令か PACKAGE マクロをそれぞれ使って)DLL またはパッケージからエクスポートする場合、これらのメンバは明示的にインスタンス化されエクスポートされる必要があります。そうでないと、エクスポートされたクラスのコンシューマで、テンプレート メンバに関する未解決の外部参照エラーが発生するおそれがあります。

例:

mypackage.h:
#define PACKAGE __declspec(package)
class PACKAGE X
{
public:
  int foo();
  template<typename T>
  int bar(T *p)
  {
    return *p;
  }
};


mypackage.cpp:
#include "mypackage.h"
int X::foo()
{
  return 7;
}

上記は C++ パッケージに存在しています。

次のアプリケーションで bar メンバを呼び出すと、未解決の外部シンボル参照エラーが発生します。

myapp.cpp:

#include "mypackage.h"

int g = 6;

int main()
{
  X x;
  x.foo();
  return x.bar(&g);
}
 エラー:
 エラー: 未解決の外部シンボル 'int X::bar<int>(int*)' が C:\USERS\ADMIN_000\APPDATA\LOCAL\TEMP\MYAPP-233656.O から参照されています

このエラーを解決するには、次の行を mypackage.cpp に追加します。

template PACKAGE int X::bar<int>(int*);

追加された行では、myapp.cpp ソースで使用されるメンバ テンプレートを明示的にインスタンス化しエクスポートしています。

DirectX ヘッダー ファイルのダウンロード

Microsoft Windows Platform SDK 内の DirectX ヘッダーのみ付属しています。"d3d.h ファイルが見つかりません" などのエラーが発生した場合、その Delphi ユニット用に生成された HPP には #include <D3D*.hpp> が含まれています。以下のいずれかを行うことができます。

  • D3D ユニットを使用しているユニットに {$NOINCLUDE Winapi.D3DX9} 指令を追加し、そのユニットの HPP ファイルを生成し直します。再生成された HPP には #include <Winapi.D3DX9.hpp> が含まれていません。
  • D3D ヘッダーの基になっている DirectX SDK をダウンロードします。DirectX SDK は、Microsoft 社から無償でダウンロードできます。詳細については、「DirectX SDK の場所(Windows)」(英語版)を参照してください。

5 ~ 8 バイトの構造体またはセットをパラメータに取るイベントは BCC64 では無効

IDE で生成されるイベントのうち、5 ~ 8 バイトの構造体またはセットをパラメータに取るものは、32 ビット C++ では有効ですが、64 ビット C++ では無効です。 これは、型が値で渡される場合にのみ影響します。型が参照で渡される場合は、Win32 と Win64 で違いはありません。

たとえば、OnContextPopup イベントの TPoint &MousePos パラメータにアクセスすると、アクセス違反が発生します。これは、Win64 プラットフォームでは TPoint &MousePos パラメータが無効だからです。__closure 型宣言に注目すると、Win32 と Win64 で違いがあることがわかります。TControl の PopupMenu イベントの __closure 宣言を以下に示します。

#ifndef _WIN64
typedef void __fastcall (__closure *TContextPopupEvent)(System::TObject* Sender, const System::Types::TPoint &MousePos, bool &Handled);
#else /* _WIN64 */
typedef void __fastcall (__closure *TContextPopupEvent)(System::TObject* Sender, System::Types::TPoint MousePos, bool &Handled);
#endif /* _WIN64 */

Win64 でも Win32 でもコードが動作するためには、IDE で生成されるハンドラを、以下のように条件指令を使って宣言する必要があります。

#ifndef _WIN64
void __fastcall TForm46::FormContextPopup(TObject *Sender, TPoint &MousePos, bool &Handled)
#else
void __fastcall TForm46::FormContextPopup(TObject *Sender, TPoint MousePos, bool &Handled)
#endif
{
  ShowMessage(System::String().sprintf(L"Mouse at (%d,%d)", MousePos.X, MousePos.Y));
}

インターフェイスをパラメータとする IDE 生成のイベント ハンドラをプログラムで割り当てできない

Delphi インターフェイスは C++ ではテンプレートとして公開されます。つまり、Delphi インターフェイス IFoo は C++ では _di_IFoo になります。しかし、IDE ではそうはならず、イベント ハンドラに IFoo* が生成されます。この結果、次の 2 つの問題が生じます。

  • IDE で生成されたイベント ハンドラをプログラムでイベントに割り当てることができません。イベント宣言とハンドラ宣言の不一致がコンパイラで検出されるからです。
  • C++ コンパイラで Delphi インターフェイス用に生成されたプロローグ/エピローグ コードがイベント ハンドラで取得されません。

メモ: この問題は、REST、FireDAC、LiveBinding などの、より新しいランタイムに影響を及ぼします。これらのすべてに、インターフェイス型をパラメータとするイベントがあります。一方、VCL には、インターフェイス型のパラメータを持つイベントはありません。

たとえば、以下は標準的なクロージャ イベント ハンドラです(生成されたハンドラの相違点を示すコメントが付け加えられています)。

typedef void __fastcall (__closure *TFDConnectionRecoverEvent)(System::TObject* ASender, 
  const Firedac::Stan::Intf::_di_IFDStanObject AInitiator, // <<< ***
  System::Sysutils::Exception* AException,
  Firedac::Phys::Intf::TFDPhysConnectionRecoverAction &AAction);

しかし、IDE で生成されるイベント ハンドラは次のようになります(やはりコメントが付け加えられています)。

void __fastcall TForm1::FDConnection1Recover(TObject *ASender, 
          const IFDStanObject *AInitiator, // <<< ***
          Exception *AException, 
          TFDPhysConnectionRecoverAction &AAction)

IDE で生成されたハンドラは安全に使用することができます。ただし、このハンドラをプログラムで割り当てようとすると、クロージャとハンドラのシグネチャが一致しないため、コンパイラ エラーが発生します。

回避策: ハンドラをプログラムで参照する場合は、以下の手順を実行します。

  1. [オブジェクト インスペクタ]でイベントをクリアします(IDE では、空でない限り、ハンドラを削除しません)。
  2. ハンドラを __published セクションから移動します。移動先はクラスの public セクション、protected セクション、private セクションのどれでもかまいません。
  3. クロージャの宣言と一致するようにハンドラの宣言と定義を更新します。
    たとえば、上記の例では、IFDStanObject *_di_IFDStanObject に置き換えます。

これで、ハンドラをプログラムで割り当てることができるはずです。

Object Pascal に関する注意事項

Object Pascal と 64 ビット Windows 版 Appmethod C++ との相互運用機能では 'absolute' キーワードを使用できない

Object Pascal 指令/キーワード "absolute" は、Win64 C++ との相互運用機能を実行する場合、Object Pascal アプリケーションの interface セクションではサポートされていません。ただし、"absolute" キーワードは implementation セクションでは使用することができます。

IDE に関する注意事項

マルチデバイス フォーム デザイナではマスタ ビューからのみコンポーネントを削除可能

別のビュー([マスタ]ビュー以外)からコンポーネント(たとえば TButton など)を削除しようとすると、次のエラー メッセージが表示されます。

 選択範囲には上位フォームで導入されたコンポーネントが含まれていますが、これは削除できません

この問題を解決するには、コンポーネントの削除を[マスタ]ビューで行います。ビューの詳細については、「フォーム デザイナ」を参照してください。

名前を変更した iOS プロジェクトは実行時またはデバッグ時に失敗するおそれあり

IDE でプロジェクトの名前を変更すると、iOS アプリケーションが実行時やデバッグ時に失敗するおそれがあります。 この問題を解決するには、以下を行います。

  1. [プロジェクト|配置]を選択します。
  2. 配置マネージャで、[デフォルトに戻す]スピード ボタンをクリックします。

Windows Server 2008 でモバイル ヘルプ ウィザードのコンテンツがブロックされる

RAD Studio では、モバイル アプリケーションの作成時に以下のいずれかの状況でモバイル ヘルプ ウィザードが表示されます。

  • 続行するのに、所定の構成手順に従う必要がある。
  • 問題が発生し、支援が必要な可能性がある。

また、[ヘルプ|モバイル ヘルプ ウィザード]を選択してモバイル ヘルプ ウィザードを開くこともできます。

Windows Server 2008 でこのウィザードが開くと、Internet Explorer ダイアログ ボックスが表示されます。ウィザードのコンテンツを参照するには、Internet Explorer のホワイトリストにウィザードのコンテンツを追加する必要があります。

モバイル ヘルプ ウィザードのセットアップについては、以下で確認できます。

データベースに関する注意事項

FireDAC コンポーネントを使用する 64 ビット Windows C++ アプリケーションでエラーが発生するおそれあり

静的リンクを使用する Windows x64 をプラットフォームとする場合は、FireDAC コンポーネントを 1 つ使用するアプリケーションをコンパイルしようとすると、以下のエラーが発生します。

c:\program files (x86)\embarcadero\studio\<n.n>\Bin\CodeGear.Cpp.Targets : warning : Warning: Out of memory
c:\program files (x86)\embarcadero\studio\<n.n>\Bin\CodeGear.Cpp.Targets(2751,5): error MSB6006: "ilink32" exited with code 2.

このエラーを回避するには、Win64 C++ アプリケーションで FireDAC を静的にリンクしません。

FireDAC の INI ファイルに関するエラーの回避策

これまでのバージョンでは、FireDAC の INI ファイルは "C:\Program Files" に作成されていましたが、現代の Windows バージョンでは、このディレクトリは通常の Windows ユーザーには読み取り専用になります。[データ エクスプローラ]や FDExplorer を使って新しい FireDAC 接続定義を追加すると "Can't modify file(ファイルを変更できません)" のようなエラーが発生する場合は、FireDAC の INI ファイルがまだ "C:\Program Files" に入っている可能性があります。この問題を解決するには、FDFixIni ユーティリティをダウンロードして実行します。その結果、FireDAC の INI ファイルが正しい場所に移動し、FireDAC レジストリが更新されます。デフォルトでは、正しい場所は "C:\Documents and Settings\All Users\Documents\Embarcadero\Studio\FireDAC" です。

この問題を解決するには:

  • 登録ユーザー向けサイト(http://cc.embarcadero.com/item/29812)から FDFixIni をダウンロードします。
  • ダウンロードしたアーカイブから EXE ファイルを解凍します。
  • 解凍したファイルを実行します。このユーティリティが正常に実行された場合は、"Move <古い場所> to <新しい場所>" というメッセージが 2 行出力されます。

Appmethod の一部のエディションに InterBase XE3 Developer エディションが付属している

この注意事項は、Appmethod の旧バージョン(1.13 または 1.14)と Appmethod 1.15 の両方が同じマシンにインストールされているユーザーを対象としたものです。

Appmethod 1.13、1.14、1.15 にはすべて InterBase XE3 Developer エディションが付属しています。Appmethod のそれぞれのライセンス スイートには、InterBase XE3 Developer エディションのライセンスも含まれています。これらの Appmethod ライセンス スイートはすべてシステム全体で参照できるので、使用できる InterBase XE3 Developer エディションのライセンスは常に 1 つだけです。

Appmethod の旧バージョンに付属していた "InterBase XE3 Developer エディション" をたまたま実行している場合は、Appmethod 1.15 に付属している InterBase XE3 Developer エディションの "developer_ibxe3" インスタンスを同時に起動することはできません。このインスタンスを起動しようとした場合は、InterBase のライセンス エラーであることを通知するエラー ダイアログが表示されます。お使いの "developer_ibxe3" インスタンスの interbase.log を詳しく調べれば、"Registration file error: License is in use by another instance of InterBase"(登録ファイル エラー: ライセンスは別の InterBase インスタンスで使用中)と記載されています。

InterBase XE3 のライセンス エラーの回避策

  1. インストール済みの Appmethod 1.13 または 1.14 に付属している "gds_db" または他の名前の InterBase インスタンス(どちらになるかはそのときの事情によります)を停止します。このインスタンスを Windows サービスとしてセットアップしてある場合は、それをシステムの[サービス]コントロール パネルでも無効にしてください。
  2. Appmethod と共にインストールされた InterBase XE3 の "developer_ibxe3" インスタンスを再起動します。今度は、適切なライセンスで正常に起動します。

Appmethod の上記の旧バージョンとそれらを使用してビルドされたアプリケーションは、Appmethod 1.15 と一緒にインストールされる更新版の InterBase XE3 Developer エディションとも連携できます。Appmethod 1.13 または 1.14 の IDE ツールおよびアプリケーションについては、この InterBase インスタンスへの TCP ループバックを通じて、お使いのデータベースに接続させます。次に例を示します。

localhost/developer_ibxe3:<データベースのパス>

Appmethod IDE では、[ツール|オプション...|環境オプション|環境変数を選択し、ローカル クライアント接続を行うための以下の[ユーザー定義環境変数]エントリを新しく追加してもよいでしょう。

  • 変数: IB_Protocol
    • 値: developer_ibxe3
  • 変数: InterBase
    • 値: C:\Program Files (x86)\Embarcadero\Studio\15.0\InterBaseXE3

ヘルプに関する注意事項

インストールされたヘルプの場所

デフォルトでは、ヘルプ ファイルは C:\Program Files (x86)\Embarcadero\Studio\15.0\Help\Doc にインストールされます。

Microsoft Document Explorer 2008(DExplore.exe)

ローカルにインストールされた Object Pascal と Appmethod C++ のドキュメントを表示するには、DExplore が必要です。Microsoft Document Explorer 2008 がインストールされていない場合は、ヘルプ システムのインストールの一部としてインストールされます。

  • Microsoft Document Explorer XE のプレリリース バージョンのライセンスが表示されるという問題が知られています。
  • IDE で F1 キーを押したときにアクセス違反が発生するなら、互換性のないバージョンの DExplore.exe がインストールされている可能性があります。バージョンを確認するには、DExplore.exe を単独で実行し、[ヘルプ|Microsoft Document Explorer バージョン情報]ボックスを開きます。QFE と表示されている場合には、Visual Studio 2008 または Prism によってクイック フィックスがインストールされています。この問題を解決するには、[コントロール パネル]を開き、[Object Pascal and Appmethod C++ 1.15 Help System]に対して[修復]を実行します。

MS SDK ヘルプ

Microsoft Windows Platform SDK ヘルプは、製品ヘルプと一緒にインストールすることもできます。ヘルプ インストーラは製品インストーラの内部で実行されます。ヘルプ インストーラの[機能の選択]ページで[MS SDK ヘルプ]の項目を[ローカル ハード ドライブにインストールする]に設定することで、ヘルプのインストール時に MS SDK ヘルプをインストールすることができます。詳細については、「Appmethod 1.14 のインストール ノート」を参照してください。

関連項目