解決策:インストーラーを使用して、プログラム自体のサイズを増やします。
それを使用するには2つの方法があります。
1. Visual ActiveXコントロールをプログラムに直接入れます。
2。ランタイムは、必要に応じてリアルタイムで確立されます。
直接使用すると、アプリケーションは初期化プロセス中に必要なActiveXコントロールを自動的に検索して作成します。
プログラムフォームに新しい方法を追加します。
Unit Uautoregactivex;
インタフェース
用途
windows、sysutils、variants、classe、controls、forms、dialogs、comobj
タイプ
tautoregactivexfrm = class(tform)
手順formcreate(sender:tobject);
プライベート
{プライベート宣言}
公共
{公開宣言}
保護されています
{公開宣言}
手順CheckException(送信者:tobject; eabort:Exception);
終わり;
var
autoregactivexfrm:tautoregactivexfrm;
実装
{$ r *.dfm}
{-----------------------------------------------------------
標準のActiveXコントロールには、コントロールを登録してコントロールをアンインストールするために関数を使用して、呼び出すことができる2つの機能dllregisterServerとdllunregisterServerがあります。 LoadLibraryを使用してDLL/OCXファイルをロードし、GetProCADDRESSを使用してDllRegisterServerとDllunRegisterServerへのポインターを取得し、これら2つの機能を直接実行してActiveXコントロールの登録とアンインストールの操作を実装し、それによってWindows SystemのREGVR32.EXEを実装してActiveXXXを実装して置き換えます。コントロールを登録してアンインストールします。
-------------------------------------------------------------- }
{-----------------------------------------------------------
パラメーター説明:
solefilename a dllまたはocxファイル名。
オレアクションは登録操作タイプを示します:1登録を示し、0はアンインストールを示します
戻り値:trueは操作が正常に実行されることを意味し、falseは操作が実行されることを意味します
-------------------------------------------------------------- }
function oleregister(solefilename:string; oleaction:byte):boolean;
const
Registerole = 1;
Unregisterole = 0;
タイプ
toleregisterFunction = function:hresult; //登録またはアンインストールプロトタイプ
var
hlibraryhandle:thandle; // loadlibrayによって返されます
hfunctionAddress:tfarproc;
RegFunction:toleregisterFunction; //登録またはアンインストールポインター
始める
結果:= false;
//ファイルを開き、DLLまたはOCXハンドルを返します
hlibraryhandle:= loadLibrary(pchar(solefileName));
if(hlibraryhandle> 0)then // dllakg ocxハンドルが正しい
試す
//登録またはアンインストール機能ポインターに戻ります
if(oleAction = Registerole)then //登録された関数ポインターを返します
hfunctionAddress:= getProcAddress(hlibraryhandle、pchar( '' dllregisterserver ''))
else //アンインストール関数ポインターを返します
hfunctionAddress:= getProcAddress(hlibraryhandle、pchar( '' dllunregisterserver '' '));
if(hfunctionAddress <> nil)then //登録またはアンインストール機能が存在するかどうかを判断します
始める
regFunction:= tolere -gisterfunction(hfunctionAddress);
regFunction> = 0 then //登録またはアンインストール操作を実行する場合、返品値> = 0は実行が成功することを意味します
/tresult:= true;
終わり;
ついに
FreeLibrary(hlibraryhandle);
終わり;
終わり;
{tautoregactivexfrm}
手順tautoregactivexfr.checkexception(sender:tobject;
EABORT:例外);
始める
Eabortがeolesyserrorの場合
始める
hResult(eolesyserror(eabort).errorcode)= regdb_e_classnotreg thenの場合
oleregister( '' d:/flash.ocx ''、1);
終わり
それ以外
Application.ShowException(EABORT);
終わり;
//メインフォームのOnCreateイベントでCheckExceptionメソッドをシステムアプリケーション変数に割り当てます。
手順tautoregactivexfrm.formcreate(sender:tobject);
var
Demoocx:Variant; //変数宣言
始める
application.onexception:= checkexception;
//クラス名文字列エラーは生成されますか?
試す
demoocx:= createoleObject( '' demo.demo '');
を除外する
EABORTで:EolesySerrorはそうします
hResult(eabort.errorcode)= co_e_classString thenの場合
始める
oleregister( '' d:/flash.ocx ''、1)の場合
/tdemoocx:= createoleObject( '' demo.demo '')
それ以外
始める
/tapplication.messagebox('''control登録は失敗しました、プログラムは正常に実行されません ''、pchar( '' Register Control '')、MB_OK+MB_ICONERROR);
/tapplication.terminate;
終わり;
終わり;
終わり;
終わり;
終わり。