Beispiel #1
0
// @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;
}
Beispiel #2
0
 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;
 }
Beispiel #3
0
int GetTLBVersion(tstring& filepath, DWORD& high, DWORD & low)
{
#ifdef _WIN32

  int found = 0;

  TCHAR fullpath[1024];
  TCHAR *p;
  if (!GetFullPathName(filepath.c_str(), COUNTOF(fullpath), fullpath, &p))
    return 0;

  ITypeLib* typeLib;
  HRESULT hr;

#ifdef _UNICODE
  hr = LoadTypeLib(fullpath, &typeLib);
#else
  // If built without UNICODE, we still need to convert this string to a Unicode string.
  WCHAR *ole_filename = (WCHAR*) WinWStrDupFromTChar(fullpath);
  if (!ole_filename) return 0;
  hr = LoadTypeLib(ole_filename, &typeLib);
  free(ole_filename);
#endif //~ _UNICODE
  
  if (SUCCEEDED(hr)) {

    TLIBATTR* typelibAttr;
    
    hr = typeLib->GetLibAttr(&typelibAttr);

    if (SUCCEEDED(hr)) {
      
      high = typelibAttr->wMajorVerNum;
      low = typelibAttr->wMinorVerNum;
      
      found = 1;

    }

    typeLib->Release();

  }

  return found;

#else

  return 0;

#endif //~ _WIN32
}
Beispiel #4
0
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;
}
Beispiel #5
0
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;
}
Beispiel #7
0
int main(int argc, char* argv[])
{

    // Parse the command line

    string cmdline;

    string mode;
    string filename;
    string filepath;

    int filefound = 0;

    if (argc != 4)
        return 1;

    // Get the full path of the local file

    mode = argv[1];
    filename = argv[2];

    char buf[MAX_PATH];
    GetCurrentDirectory(MAX_PATH, buf);
    filepath = buf;

    if ((filename.substr(0, 1).compare("\\") != 0) && (filename.substr(1, 1).compare(":") != 0)) {

        // Path is relative

        if (filepath.substr(filepath.length() - 1, 1).compare("\\") != 0)
            filepath.append("\\");

        filepath.append(filename);

    } else if ((filename.substr(0, 1).compare("\\") == 0) && (filename.substr(1, 1).compare("\\") != 0)) {

        // Path is relative to current root

        if (filepath.substr(1, 1).compare(":") == 0) {

            // Standard path

            filepath = filepath.substr(0, filepath.find('\\'));
            filepath.append(filename);

        } else {

            // UNC path

            filepath = filepath.substr(0, filepath.find('\\', filepath.find('\\', 2) + 1));
            filepath.append(filename);

        }

    } else {

        // Absolute path

        filepath = filename;

    }

    // Validate filename

    WIN32_FIND_DATA wfd;
    HANDLE hFind = FindFirstFile(filepath.c_str(), &wfd);

    if (hFind != INVALID_HANDLE_VALUE)
    {
        filefound = 1;
        FindClose(hFind);
    }

    int versionfound = 0;
    DWORD low = 0, high = 0;

    if (filefound)
    {

        // Get version

        // DLL

        if (mode.compare("D") == 0)
        {

            DWORD versionsize;
            DWORD temp;

            versionsize = GetFileVersionInfoSize((char*)filepath.c_str(), &temp);

            if (versionsize)
            {

                void *buf;
                buf = (void *)GlobalAlloc(GPTR, versionsize);

                if (buf)
                {

                    UINT uLen;
                    VS_FIXEDFILEINFO *pvsf;

                    if (GetFileVersionInfo((char*)filepath.c_str(), 0, versionsize, buf) && VerQueryValue(buf, "\\", (void**)&pvsf,&uLen))
                    {
                        high = pvsf->dwFileVersionMS;
                        low = pvsf->dwFileVersionLS;

                        versionfound = 1;
                    }

                    GlobalFree(buf);

                }

            }

        }

        // TLB

        if (mode.compare("T") == 0)
        {

            wchar_t ole_filename[1024];
            MultiByteToWideChar(CP_ACP, 0, filepath.c_str(), filepath.length() + 1, ole_filename, 1024);

            ITypeLib* typeLib;
            HRESULT hr;

            hr = LoadTypeLib(ole_filename, &typeLib);

            if (SUCCEEDED(hr)) {

                TLIBATTR* typelibAttr;

                hr = typeLib->GetLibAttr(&typelibAttr);

                if (SUCCEEDED(hr)) {

                    high = typelibAttr->wMajorVerNum;
                    low = typelibAttr->wMinorVerNum;

                    versionfound = 1;

                }

                typeLib->Release();

            }

        }

    }

    // Write the version to an NSIS header file

    ofstream header(argv[3], ofstream::out);

    if (header)
    {

        if (!filefound)
        {
            header << "!define LIBRARY_VERSION_FILENOTFOUND" << endl;
        }
        else if (!versionfound)
        {
            header << "!define LIBRARY_VERSION_NONE" << endl;
        }
        else
        {
            header << "!define LIBRARY_VERSION_HIGH " << high << endl;
            header << "!define LIBRARY_VERSION_LOW " << low << endl;
        }

        header.close();

    }

    return 0;

}
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;
}