/* * Copyright(c) 2000 arton * * You may distribute under the terms of either the GNU General Public * License * * $Date$ */ // RScript.cpp : DLL エクスポートのインプリメンテーション // メモ: Proxy/Stub 情報 // proxy/stub コードをオブジェクト DLL 内へ結合するためには、プロジェクトへ // dlldatax.c ファイルを追加してください。 このファイルに対してプリコンパイル // 済みヘッダーが無効であることを確認して、プロジェクトの定義へ _MERGE_PROXYSTUB // を追加してください。 // // DCOM サポートを含む WinNT4.0 または Win95 が実行中ではない場合は、 // 以下の定義を dlldatax.c から削除してください。 // #define _WIN32_WINNT 0x0400 // // さらに、MIDL を /Oicf スイッチなしで実行している場合は、 // 以下の定義を dlldatax.c から削除してください。 // #define USE_STUBLESS_PROXY // // 以下のファイルをアウトプットに追加することによって RScript.idl 用のカスタム // ビルドのルールを修正してください。 // RScript_p.c // dlldata.c // 別々の proxy/stub DLL をビルドするためには、プロジェクトのディレクトリで // nmake -f RScriptps.mak を実行してください。 #include "stdafx.h" #include "resource.h" #include #include "RScript.h" #include "RScript_i.c" #include "RubyScript.h" #include "RubyWrapper.h" #include "dlldatax.h" #ifdef _MERGE_PROXYSTUB extern "C" HINSTANCE hProxyDll; #endif DEFINE_GUID(SID_GetCaller, 0x4717cc40, 0xbcb9, 0x11d0, 0x93, 0x36, 0x0, 0xa0, 0xc9, 0xd, 0xca, 0xa9); CComModule _Module; BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_RubyScript, CRubyScript) END_OBJECT_MAP() ///////////////////////////////////////////////////////////////////////////// // DLL エントリ ポイント extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { lpReserved; #ifdef _MERGE_PROXYSTUB if (!PrxDllMain(hInstance, dwReason, lpReserved)) return FALSE; #endif if (dwReason == DLL_PROCESS_ATTACH) { _Module.Init(ObjectMap, hInstance, &LIBID_RSCRIPTLib); DisableThreadLibraryCalls(hInstance); } else if (dwReason == DLL_PROCESS_DETACH) _Module.Term(); return TRUE; // ok } ///////////////////////////////////////////////////////////////////////////// // DLL が OLE によってアンロード可能かどうかを調べるために使用されます STDAPI DllCanUnloadNow(void) { #ifdef _MERGE_PROXYSTUB if (PrxDllCanUnloadNow() != S_OK) return S_FALSE; #endif if (_Module.GetLockCount()==0) { return S_OK; } return S_FALSE; } ///////////////////////////////////////////////////////////////////////////// // 要求された型のオブジェクトを作成するためにクラス ファクトリを返します STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { #ifdef _MERGE_PROXYSTUB if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK) return S_OK; #endif return _Module.GetClassObject(rclsid, riid, ppv); } ///////////////////////////////////////////////////////////////////////////// // DllRegisterServer - システム レジストリへエントリを追加します STDAPI DllRegisterServer(void) { #ifdef _MERGE_PROXYSTUB HRESULT hRes = PrxDllRegisterServer(); if (FAILED(hRes)) return hRes; #endif // オブジェクト、タイプライブラリおよびタイプライブラリ内の全てのインターフェイスを登録します return _Module.RegisterServer(TRUE); } ///////////////////////////////////////////////////////////////////////////// // DllUnregisterServer - システム レジストリからエントリを削除します STDAPI DllUnregisterServer(void) { #ifdef _MERGE_PROXYSTUB PrxDllUnregisterServer(); #endif return _Module.UnregisterServer(TRUE); }