Larry Bates wrote:
> Tim Golden wrote:
>> Larry Bates wrote:
>>> I almost have it completely working with one remaining problem. The dialog
>>> allows the user to specify an AVI that runs showing activity while things
>>> are
>>> going in the background. There are AVIs stored in shell32.dll for
>>> move/copy
>>> (resource number 160 and 161 respectively). Below is the VB code to set
>>> these,
>>> but I'm not getting anywhere trying to convert. I was hoping you could
>>> take a
>>> quick look.
>>> ' File operation animations resource IDs in shell32.dll
>>> Private Const RES_AVI_FILEMOVE = 160
>>> Private Const RES_AVI_FILECOPY = 161
>>>
>>> With oProgDlg
>>> .SetTitle IIf(fMove, "Moving file...", "Copying file...")
>>> .SetAnimation m_hLibShell32, IIf(fMove, RES_AVI_FILEMOVE,
>>> RES_AVI_FILECOPY)
>>> .SetLine 1, txtSource.Text, 1&, ByVal 0&
>>> .SetLine 2, txtDest.Text, 1&, ByVal 0&
>>> .SetCancelMsg "Please wait...", ByVal 0&
>>> .StartProgressDialog Me.hwnd, Nothing, PROGDLG_MODAL Or _
>>> PROGDLG_AUTOTIME Or _
>>> PROGDLG_NOMINIMIZE, ByVal 0&
>>> End With
>>>
>>> Private Sub Form_Load()
>>>
>>> ' Load Shell32 to access the AVI animation resources
>>> m_hLibShell32 = LoadLibrary("shell32.dll")
>>>
>>> End Sub
>>>
>>> Private Sub Form_Unload(Cancel As Integer)
>>>
>>> Call FreeLibrary(m_hLibShell32)
>>>
>>> End Sub
>> Which bit aren't you getting, Larry? (Not sure how far your
>> existing expertise extends). The LoadLibrary stuff is what
>> ctypes.windll encapsulates. ie
>>
>> <code>
>> import ctypes
>> shell32 = ctypes.windll.shell32
>> m_hLibShell32 = shell32._handle
>> </code>
>>
>> gets you the same as the Form_Load Sub. Alternatively, you
>> could import the lower-level _ctypes and use its LoadLibrary
>> binding directly:
>>
>> <code>
>> import _ctypes
>> m_hLibShell32 = _ctypes.LoadLibrary ("shell32.dll")
>>
>> #
>> #
>>
>> _ctypes.FreeLibrary (m_hLibShell32)
>> </code>
>>
>> But maybe that's not the bit you're having trouble with?
>>
>> TJG
>
> Tim,
>
> That did the trick. It was the:
>
> m_hLibShell32 = shell32._handle
>
> that I needed.
>
> Thanks loads.
>
> -Larry
One last problem. When I working class inside my COM object and everything
works until I (or Python) destroys the reference to this object. I then get
this exception:
Exception exceptions.ValueError: 'COM method call without VTable' in <bound meth
od POINTER(IProgressDialog).__del__ of <POINTER(IProgressDialog) ptr=0x2670c8 at
1ef5e90>> ignored
I tried putting del inside try block with blank exception (normally a bad idea
but in this case I thought it would be OK) as follows:
try:
del CB
except:
pass
and
try:
del CB
except pythoncom.com_error:
pass
but neither of these worke (e.g. exception still echos to console).
I guess I'm missing a step in "properly" destroying this object, but I can't
seem to determine what it is. Any suggestions would be greatly appreciated.
Regards,
Larry
_______________________________________________
python-win32 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-win32