概要
Delphiで書かれたジェネリックスを使用している関数をC++Builderから呼び出すと例外が発生します。
動作環境
C++Builder XE3で確認しました。
(もしかしたら、私の環境だけで発生する問題かもしれません。)
再現方法
- メニューから「新規作成」→「VCL フォームアプリケーション」を選択します。
-
プロジェクトに次のUnit2.pasを追加します。
unit Unit2; interface procedure Func; implementation uses System.Generics.Collections; procedure Func; var L: TList<Integer>; begin L := TList<Integer>.Create; end; end.
- Unit1.cppに次のコードを追加します。
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.hpp" //追加 //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Func(); //追加 } //---------------------------------------------------------------------------
- プロジェクトをビルドして、実行します。
Func()のところで例外が発生します。
回避策
プロジェクトオプションで「実行時パッケージを使ってリンク」が「true」になっていると、この例外が発生するようです。
「false」にすると発生しませんでした。