HINSTANCE hInstLibrary = LoadLibrary(L"E:\Project\VS\LoadDll\Release\TestDll.dll");
if (hInstLibrary == NULL)
{
cout <<" DLL の読み込み [失敗]。"<
FreeLibrary(hInstLibrary);
}else{
cout <<"DLL の読み込み [成功]。"<}
_AddFunc = (AddFunc)GetProcAddress(hInstLibrary, "Add");
_FunctionFunc = (FunctionFunc)GetProcAddress(hInstLibrary, "Function");
if ((_AddFunc == NULL) || (_FunctionFunc == NULL))
{
FreeLibrary(hInstLibrary);//Release
}else{
cout <<"---DLL 関数を取得 [OK]---。 "<< endl;
}
cout << _AddFunc(1, 1) << endl; //
_FunctionFunc() の呼び出しを開始します; //
cin.get (); // プログラムがフラッシュしないようにフォーカスを取得します。
FreeLibrary(hInstLibrary);//呼び出し後、メモリを解放します。
戻り(1);
}
2. ActiveX コントロールの実装:
ここでは、MFC ActiveX の代わりに ATL コントロールの実装を選択します。
ファイル -> 新規 -> ATL プロジェクト -> プロジェクト名 (「FROMYANTAI」) を入力 -> ダイナミック リンク ライブラリ (DLL) を選択 -> 完了。
完了後、右側の「ソリューション エクスプローラー」に多数のヘッダー H ファイルと CPP 実装ファイルが生成されます。これらはデフォルトであり、変更する必要はありません。
(1) ALT 単純オブジェクトを追加します。プロジェクト名 (先ほど指定した名前) をマウスでクリックし、「クラスの追加」を選択し、ATL 単純オブジェクトを選択します。
次のステップ、名前を付けます:「ytiicrj」 -> 次のステップ: 他はすべて変更せず、サポートで「接続ポイント」と「IE オブジェクトのサポート」を選択します -> 完了。
次のステップは、WEB ページから呼び出せるように「ytiicrj」にメソッドを追加することです。 「クラスビュー」で「iytiicrj」(灰色の鍵アイコンがあります)を選択し、右クリックして追加→メソッドの追加を選択します。メソッドに「GetContent」という名前を付けます。「パラメータ属性には IN を選択し、パラメータ タイプには LONG を選択し、パラメータ名 A -」「続行します。パラメータ属性には IN を選択し、パラメータ タイプには LONG を選択します。パラメータ名 B -」追加; 続行します。 OUT とパラメータ属性 RETVAL を選択し、パラメータ タイプとパラメータ名として LONG* を選択します。 out –》追加---》クリックして完了します。
これにより、(最後の行に) 1 つが ytiicrj.H ヘッダー ファイルに追加されます。
STDMETHOD(GetContent)(LONG a, LONG b, LONG* out);
ytiicrj.CPP ファイルに追加されます。実装クラス:
STDMETHODIMP CCaluNumCtrl::GetContent ( LONG a, LONG b, LONG* out)
{
// TODO: ここに実装コードを追加します
return S_OK>}
(2), in ytiicrj.H ファイルで、DLL クラス ライブラリを呼び出します。コードは次のとおりです。
// CaluNumCtrl.h: ytiicrj のステートメント 太字の部分は特定の実装であり、その他は変更されていません。
#pragma Once
#include " resource.h " // メインシンボル
#include
// 追加
#include "AtlActiveX_i.h"
#include "_ICaluNumCtrlEvents_CP.h"
#if定義(_WIN32_WCE) ) && ! defined(_CE_DCOM) && !define(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "シングルスレッド COM オブジェクトは、Windows CE プラットフォーム (完全な DCOM サポートを提供しない Windows Mobile プラットフォームなど) では適切にサポートされていません。_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA を次のように定義します。 ATL がシングル スレッド オブジェクトの作成をサポートするように強制し、このモデルが唯一のスレッド モデルであるため、rgs ファイル内のスレッド モデルの使用を許可します。 DCOM 以外の Windows CE プラットフォームでサポートされています。 "
#endif
// ytiicrj
class ATL_NO_VTABLE Cytiicrj:
// 行を追加: セキュリティ プロンプトは削除されます。 -- ブラウザ呼び出しの実行時、秘密の質問は表示されません。
public IObjectSafetyImpl,
public IConnectionPointContainerImpl,
public CProxy_ICaluNumCtrlEvents 🎜>public IObjectWithSiteImpl、
public IDispatchImpl
{
public:
//以下の 3 行の実装定義。
typedef int (*AddFunc)(int,int); //DLL ADD メソッドに対応する型定義。 Func はカスタマイズされており、必要に応じて記述できます。
HINSTANCE hInstLibrary;
AddFunc _AddFunc; //クラスマッピング
Cytiicrj()
{
//計算用の DLL の呼び出しを開始します。
hInstLibrary = LoadLibrary(L"TestDll.dll");//書き込んだ DLL ファイルをこのプロジェクトで生成されたディレクトリに配置します
if (hInstLibrary == NULL)
{
FreeLibrary( hInstLibrary) ;//リソース解放
}else{
}
//メソッドを呼び出し、メソッド ハンドルを返します。
_AddFunc = (AddFunc)GetProcAddress(hInstLibrary, "Add");
}
DECLARE_REGISTRY_RESOURCEID(IDR_CALUNUMCTRL)
BEGIN_COM_MAP(Cytiicrj)
COM_INTERFACE_ENTRY(ICaluNumCtrl)
COM _INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IObjectWithSite)
//行を追加: セキュリティ プロンプトを無効にします。 -- ブラウザー呼び出しの実行時に、セキュリティの質問は表示されません。
COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(Cytiicrj)
CONNECTION_POINT_ENTRY(__uuidof(_ICaluNumCtrlEvents))
END_CONNECTION_POINT_MAP()
DECLARE_PROTECT _FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
FreeLibrary(hInstLibrary)
}
public:
STDMETHOD(GetContent); a, LONG b, LONG* out);
OBJECT_ENTRY_AUTO(__uuidof(CaluNumCtrl), Cytiicrj)
(3) ytiicrj.PP ファイルに戻り、次のように実装コードを追加します。
STDMETHODIMP CCaluNumCtrl::GetContent(LONG a, LONG b, LONG* out)
{
// TODO: ここに実装コードを追加します
int sum = this->_AddFunc(static_cast(a),static_cast(b));
*out = static_cast(sum);
return S_OK ;
}
(4) DLL の生成:
このステップは非常に簡単です。リリース モードを選択し、生成するプロジェクトをクリックします (選択を求めるプロンプトが表示されます)。 REG32 を登録して選択します)。これにより、Release ディレクトリに多数のファイルが生成されますが、必要なのは DLL ファイルです。
3. DLL および ATL ActiveX コントロール DLL は CAB ファイルとしてパッケージ化されます。
例: test.CAB を生成した後、Web ページにダウンロードとインストールを求めるプロンプトが表示されます。
(1) 最初に setup.inf ファイルを定義します。このファイルには、ダウンロードしたコンテンツとターゲット ディレクトリ、バージョン番号と対応する DLL ファイルが記述されています。これは手動で記述する必要があります。私の内容は次のとおりです (名前は適宜変更してください):
[version]
; バージョンの署名 (NT と Win95 の両方で同じ)
signature="$CHICAGO$"
AdvancedINF=2.0
[コードの追加]
AtlActiveX.dll=AtlActiveX.dll
TestDll.dll=TestDll.dll
setup.inf=setup.inf
[install.files]
AtlActiveX.dll =AtlActiveX.dll
TestDll.dll=TestDll.dll
setup.inf=setup.inf
[AtlActiveX.dll]
clsid={4AE870B5-C7FB-4171-A47E-7F57AFD86F67}
file-win32-x86 =thiscab
FileVersion=1,0,0,1
DestDir=11
RegisterServer=yes
[TestDll.dll]
file-win32-x86=thiscab
DestDir=11
FileVersion=1,0,0,1
RegisterServer=yes
[setup.inf]
file=thiscab
[RegisterFiles]
%AtlActiveX。 dll
; INF ファイルの終わり
(2) リソースを統合します:
setup.inf ファイルを含むすべての DLL を 1 つのディレクトリに配置し、次のコマンドを実行します。 CAB パッケージ。
実行後、最初のオプションを選択し、次に 3 番目のオプションを選択し、次にファイルを追加 (DLL および INF ファイルを選択)、次に出力ディレクトリを選択して CAB ファイル名を作成し、次のステップの 2 番目のオプションを選択します。 2 番目のオプションを選択して、[OK] をクリックします。これにより、CAB ファイルが生成されます。
(3) WEB ページは、追加操作を実行するために ActiveX コントロールを呼び出します。
test.htm Web ページを作成し、CAB ファイルをディレクトリに配置します。test.htm の内容は次のとおりです。
🎜>
新しいページ