Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As _ Any, source As Any, ByVal bytes As Long)' convert a BSTR into a VB StringFunction StringFromBSTR(ByVal pointer As Long) As String Dim temp As String ' copy the pointer into the temporary string's BSTR CopyMemory ByVal VarPtr(temp), pointer, 4 ' now Temp points to the original string, so we can copy it StringFromBSTR = temp ' manually clear then temporary string to avoid GPFs CopyMemory ByVal VarPtr(temp), 0&, 4End Function