Update of /cvsroot/pywin32/pywin32/com/win32com/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15533/com/win32com/src
Modified Files:
PyStorage.cpp
Log Message:
Load module handle and function pointers once
Index: PyStorage.cpp
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32com/src/PyStorage.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** PyStorage.cpp 10 Feb 2005 02:23:21 -0000 1.7
--- PyStorage.cpp 12 Feb 2005 17:14:51 -0000 1.8
***************
*** 6,10 ****
#include "PythonCOM.h"
#include "PythonCOMServer.h"
!
// @doc
--- 6,10 ----
#include "PythonCOM.h"
#include "PythonCOMServer.h"
! static HMODULE ole32=NULL;
// @doc
***************
*** 163,169 ****
if (myStgOpenStorageEx==NULL) { // Haven't tried to fetch it yet.
myStgOpenStorageEx = (PFNStgOpenStorageEx)-1;
! HMODULE hmodule=GetModuleHandle("Ole32.dll");
! if (hmodule!=NULL){
! FARPROC fp = GetProcAddress(hmodule,"StgOpenStorageEx");
if (fp!=NULL)
myStgOpenStorageEx=(PFNStgOpenStorageEx)fp;
--- 163,170 ----
if (myStgOpenStorageEx==NULL) { // Haven't tried to fetch it yet.
myStgOpenStorageEx = (PFNStgOpenStorageEx)-1;
! if (ole32==NULL)
! ole32=GetModuleHandle("Ole32.dll");
! if (ole32!=NULL){
! FARPROC fp = GetProcAddress(ole32,"StgOpenStorageEx");
if (fp!=NULL)
myStgOpenStorageEx=(PFNStgOpenStorageEx)fp;
***************
*** 218,221 ****
--- 219,236 ----
FMTID fmtid;
PyObject *obfmtid=NULL;
+
+ typedef HRESULT (WINAPI * PFNFmtIdToPropStgName)(const FMTID*, LPOLESTR);
+ static PFNFmtIdToPropStgName pfnFmtIdToPropStgName=NULL;
+ static BOOL pfnchecked=FALSE;
+ if (!pfnchecked){
+ if (ole32==NULL)
+ ole32=GetModuleHandle("Ole32.dll");
+ if (ole32!=NULL)
+ pfnFmtIdToPropStgName = (PFNFmtIdToPropStgName)GetProcAddress(ole32, "FmtIdToPropStgName");
+ pfnchecked=TRUE;
+ }
+ if (pfnFmtIdToPropStgName==NULL)
+ return PyErr_Format(PyExc_NotImplementedError,"FmtIdToPropStgName is not available on this platform");
+
if (!PyArg_ParseTuple(args, "O:FmtIdToPropStgName", &obfmtid))
return NULL;
***************
*** 223,231 ****
return NULL;
! typedef HRESULT (WINAPI * PFNFmtIdToPropStgName)(const FMTID*, LPOLESTR);
! HMODULE hmod = GetModuleHandle(TEXT("ole32.dll"));
! PFNFmtIdToPropStgName pfnFmtIdToPropStgName = (PFNFmtIdToPropStgName)GetProcAddress(hmod, "FmtIdToPropStgName");
! if (pfnFmtIdToPropStgName==NULL)
! return PyCom_BuildPyException(E_NOTIMPL);
PY_INTERFACE_PRECALL;
err = (*pfnFmtIdToPropStgName)(&fmtid, oszName);
--- 238,242 ----
return NULL;
!
PY_INTERFACE_PRECALL;
err = (*pfnFmtIdToPropStgName)(&fmtid, oszName);
***************
*** 245,248 ****
--- 256,273 ----
HRESULT err;
PyObject *obName=NULL;
+
+ typedef HRESULT (WINAPI * PFNPropStgNameToFmtId)(const LPOLESTR, FMTID*);
+ static PFNPropStgNameToFmtId pfnPropStgNameToFmtId=NULL;
+ static BOOL pfnchecked=FALSE;
+ if (!pfnchecked){
+ if (ole32==NULL)
+ ole32=GetModuleHandle("Ole32.dll");
+ if (ole32!=NULL)
+ pfnPropStgNameToFmtId = (PFNPropStgNameToFmtId)GetProcAddress(ole32, "PropStgNameToFmtId");
+ pfnchecked=TRUE;
+ }
+ if (pfnPropStgNameToFmtId==NULL)
+ return PyErr_Format(PyExc_NotImplementedError,"PropStgNameToFmtId is not available on this platform");
+
if (!PyArg_ParseTuple(args, "O:PropStgNameToFmtId", &obName))
return NULL;
***************
*** 250,258 ****
return NULL;
- typedef HRESULT (WINAPI * PFNPropStgNameToFmtId)(const LPOLESTR, FMTID*);
- HMODULE hmod = GetModuleHandle(TEXT("ole32.dll"));
- PFNPropStgNameToFmtId pfnPropStgNameToFmtId = (PFNPropStgNameToFmtId)GetProcAddress(hmod, "PropStgNameToFmtId");
- if (pfnPropStgNameToFmtId==NULL)
- return PyCom_BuildPyException(E_NOTIMPL);
PY_INTERFACE_PRECALL;
err = (*pfnPropStgNameToFmtId)(oszName, &fmtid);
--- 275,278 ----
|