カスタムCodeInsightマネージャをC++ Builder 10.1.2 Berlinに登録しようとしています。初期化/終了セクションなしでカスタムCodeInsightマネージャをC++ Builderに登録する
例えばC++、パスカルでのinitialization
とfinalization
セクションオブジェクトのようなものは何もありませんので
var
codeManagerIndex: Integer;
{...}
initialization
codeManagerIndex := (BorlandIDEServices as IOTACodeInsightServices).AddCodeInsightManager(TMyCodeInsightManager.Create);
finalization
(borlandIDEServices as IOTACodeInsightServices).RemoveCodeInsightManager(codeManagerIndex);
end.
私は、コンストラクタ/デストラクタを持つカスタムrunner
クラスで自分の行動を再現しようとした:
class Runner
{
public:
int FCodeManagerIndex;
_di_IOTACodeInsightServices CIS;
Runner() {
if (BorlandIDEServices->Supports(CIS))
FCodeManagerIndex = CIS->AddCodeInsightManager(new TMyCodeInsightManager);
}
~Runner() {
if (BorlandIDEServices->Supports(CIS))
CIS->RemoveCodeInsightManager(FCodeManagerIndex);
}
};
#pragma argsused
extern "C" int _libmain(unsigned long reason)
{
Runner Run;
return 1;
}
私は私の単純な実装をコンパイルすることができますが、私は次のことが起こっているパッケージをインストールしようとすると:
第一試み:エラーメッセージ:がパッケージを読み込むことができません... mypackage.bpl - ダイナミックリットルインクライブラリ(DLL)の初期化ルーチンが失敗しました。
第二試み:例外(C0000005)モジュールにDllEntryPointまたはDllMainの間に発生しました:... mypackage.bpl ...その後、IDEがクラッシュします。
これは登録に間違った方法ですか? ここで何が間違っていますか?
P.S. [TLIB警告]警告:ライブラリがページサイズには大きすぎ、ページサイズ32で再構築されましたが、コンパイル時に警告が表示されますが、これが私のエラーの理由ではないと確信しています。 (?)
これはクラスのコンストラクタでは行いません。次に、静的変数を宣言します。コンストラクタは起動時に実行されます。 –