// @object TLIBATTR|Type library attributes are represented as a tuple of: PyObject *PyITypeLib::GetLibAttr() { TLIBATTR *attr; ITypeLib *pMyTypeLib = GetI(this); if (pMyTypeLib==NULL) return NULL; PY_INTERFACE_PRECALL; SCODE sc = pMyTypeLib->GetLibAttr(&attr); PY_INTERFACE_POSTCALL; if (FAILED(sc)) return PyCom_BuildPyException(sc, pMyTypeLib, IID_ITypeLib); PyObject *obIID = PyWinObject_FromIID(attr->guid); PyObject *ret = NULL; if (obIID!=NULL) { ret = Py_BuildValue("Oiiiii", obIID, // @tupleitem 0|<o PyIID>|IID|The IID for the library attr->lcid, // @tupleitem 1|int|lcid|The default locale ID for the library attr->syskind, // @tupleitem 2|int|syskind|Identifies the target operating system platform attr->wMajorVerNum, // @tupleitem 3|int|majorVersion|The major version number of the library attr->wMinorVerNum, // @tupleitem 4|int|minorVersion|The minor version number of the library attr->wLibFlags); // @tupleitem 5|int|flags|Flags for the library. Py_DECREF(obIID); } { PY_INTERFACE_PRECALL; pMyTypeLib->ReleaseTLibAttr(attr); PY_INTERFACE_POSTCALL; } return ret; }
JNIEXPORT jobject JNICALL Java_org_racob_com_TypeInfo_getContainingTypeLib (JNIEnv *env, jobject obj, jint pointer) { ITypeInfo *typeInfo = (ITypeInfo *) pointer; ITypeLib* typeLib = NULL; unsigned int index = 0; HRESULT hr = typeInfo->GetContainingTypeLib(&typeLib, &index); if (!SUCCEEDED(hr)) { ThrowComFail(env, "GetContainingTypeLib failed", hr); return NULL; } int typeCount = typeLib->GetTypeInfoCount(); if (typeCount == E_NOTIMPL) { ThrowComFail(env, "GetContainingTypeLib failed to get count", hr); return NULL; } TLIBATTR *libAttr = NULL; hr = typeLib->GetLibAttr(&libAttr); if (!SUCCEEDED(hr)) { ThrowComFail(env, "Automation.loadTypeLibEx failed", hr); return NULL; } jstring guid = makeGUIDString(env, libAttr->guid); jclass autoClass = env->FindClass("org/racob/com/TypeLib"); jmethodID autoCons = env->GetMethodID(autoClass, "<init>", "(IILjava/lang/String;IIII)V"); jobject newAuto = env->NewObject(autoClass, autoCons, (jint) typeLib, index, guid, typeCount, libAttr->wLibFlags, libAttr->wMajorVerNum, libAttr->wMinorVerNum); typeLib->ReleaseTLibAttr(libAttr); return newAuto; }
HRESULT ComReg::UnRegisterTypeLibResource(const wchar_t* fullpath) { ITypeLib* pTypeLib; HRESULT hr = LoadTypeLib(fullpath, &pTypeLib); //Does not register if filename is a full path, which is what we want. if (FAILED(hr)) return hr; assert(pTypeLib); TLIBATTR* pLibAttr; hr = pTypeLib->GetLibAttr(&pLibAttr); if (FAILED(hr)) { pTypeLib->Release(); pTypeLib = 0; return hr; } assert(pLibAttr); const TLIBATTR a(*pLibAttr); pTypeLib->ReleaseTLibAttr(pLibAttr); pTypeLib->Release(); pTypeLib = 0; hr = UnRegisterTypeLib( a.guid, a.wMajorVerNum, a.wMinorVerNum, a.lcid, a.syskind); return hr; }
HRESULT ComReg::GetTypeLibAttr( const wchar_t* fullpath, TLIBATTR& a) { ITypeLib* pTypeLib; HRESULT hr = LoadTypeLib(fullpath, &pTypeLib); //Does not register if filename is a full path, which is what we want. if (FAILED(hr)) return hr; assert(pTypeLib); TLIBATTR* pLibAttr; hr = pTypeLib->GetLibAttr(&pLibAttr); if (FAILED(hr)) { pTypeLib->Release(); pTypeLib = 0; return hr; } assert(pLibAttr); a = *pLibAttr; pTypeLib->ReleaseTLibAttr(pLibAttr); pTypeLib->Release(); pTypeLib = 0; return S_OK; }
STDAPI DllUnregisterServer() { HRESULT hr = AMovieDllRegisterServer2(FALSE); // unregister type library WCHAR achFileName[MAX_PATH]; GetModuleFileNameW(g_hInst, achFileName, MAX_PATH); ITypeLib* pTypeLib; LoadTypeLib(achFileName, &pTypeLib); if (pTypeLib) { TLIBATTR* ptla; hr = pTypeLib->GetLibAttr(&ptla); if (SUCCEEDED(hr)) { hr = UnRegisterTypeLib(ptla->guid, ptla->wMajorVerNum, ptla->wMinorVerNum, ptla->lcid, ptla->syskind); pTypeLib->ReleaseTLibAttr(ptla); } pTypeLib->Release(); } return hr; }
STDAPI DllUnregisterServer(VOID) #endif { HRESULT rslt; HINSTANCE hInst; hInst = GetModuleHandle(DBCLIENT_DLL); if (hInst) { DBIPATH pszDllPath = { 0 }; OLECHAR pszDllPathw[DBIMAXPATHLEN+1] = { 0 }; GetModuleFileName(hInst, pszDllPath, sizeof(pszDllPath)); MultiByteToWideChar(0, 0, pszDllPath, -1, pszDllPathw, sizeof(pszDllPathw)/sizeof(pszDllPathw[0])); ITypeLib *pTypeLib = 0; ; // oleauto.h rslt = LoadTypeLib(pszDllPathw, &pTypeLib); if (!rslt) { TLIBATTR *pLibAttr = 0; // oaidl.h pTypeLib->GetLibAttr(&pLibAttr); HRESULT hr = UnRegisterTypeLib(pLibAttr->guid, pLibAttr->wMajorVerNum, pLibAttr->wMinorVerNum, pLibAttr->lcid, pLibAttr->syskind); if (hr != S_OK) { regError("ERROR: UnregisterTypeLib returned %lX", hr); } pTypeLib->ReleaseTLibAttr(pLibAttr); pTypeLib->Release(); pTypeLib = 0; } else { regError("ERROR: LoadTypeLib returned %lX", rslt); } } #ifdef MIDAS_DLL // DSBASE rslt = Register_IF(NULL, PROGID_MDSBASE, NULL, PROGID_MDSBASE_1, NULL, CLSID_MDSBASE_1, FALSE); if (!rslt) rslt = Register_IF(NULL, PROGID_MDSBASE_1, NULL, NULL, NULL, CLSID_MDSBASE_1, FALSE); // DSCursor if (!rslt) rslt = Register_IF(NULL, PROGID_MDSCURSOR, NULL, PROGID_MDSCURSOR_1, NULL, CLSID_MDSCURSOR_1, FALSE); if (!rslt) rslt = Register_IF(NULL, PROGID_MDSCURSOR_1, NULL, NULL, NULL, CLSID_MDSCURSOR_1, FALSE); // DSDATAPACKET if (!rslt) rslt = Register_IF(NULL, PROGID_MDATAPACKETREAD, NULL, NULL, NULL, CLSID_MDATAPACKETREAD, FALSE); if (!rslt) rslt = Register_IF(NULL, PROGID_MDATAPACKETWRITE, NULL, NULL, NULL, CLSID_MDATAPACKETWRITE, FALSE); #else // DSBASE rslt = Register_IF(NULL, PROGID_DSBASE, NULL, PROGID_DSBASE_2, NULL, CLSID_DSBASE_2, FALSE); if (!rslt) rslt = Register_IF(NULL, PROGID_DSBASE_1, NULL, NULL, NULL, CLSID_DSBASE_1, FALSE); if (!rslt) rslt = Register_IF(NULL, PROGID_DSBASE_2, NULL, NULL, NULL, CLSID_DSBASE_2, FALSE); // DSCursor if (!rslt) rslt = Register_IF(NULL, PROGID_DSCURSOR, NULL, PROGID_DSCURSOR_2, NULL, CLSID_DSCURSOR_2, FALSE); if (!rslt) rslt = Register_IF(NULL, PROGID_DSCURSOR_1, NULL, NULL, NULL, CLSID_DSCURSOR_1, FALSE); if (!rslt) rslt = Register_IF(NULL, PROGID_DSCURSOR_2, NULL, NULL, NULL, CLSID_DSCURSOR_2, FALSE); // DSDATAPACKET if (!rslt) rslt = Register_IF(NULL, PROGID_DATAPACKETREAD, NULL, NULL, NULL, CLSID_DATAPACKETREAD, FALSE); if (!rslt) rslt = Register_IF(NULL, PROGID_DATAPACKETWRITE, NULL, NULL, NULL, CLSID_DATAPACKETWRITE, FALSE); #endif return rslt; }