VB6: не могу сделать запись с моей ActiveX DLL - PullRequest
2 голосов
/ 14 апреля 2011

Я пытаюсь добавить запись в dll, которая, кажется, застряла во время работы.Я попытался просто добавить пару подпрограмм для входа в файл:

Sub PrepareLogging(ByVal strAppName As String)
  Dim objFS As FileSystemObject
  Dim objFolder As Folder
  Dim objFile As File

  Set objFS = New Scripting.FileSystemObject
  g_strAppName = strAppName
  If Not objFS.FolderExists(strLOG_PATH & g_strAppName) Then
    objFS.CreateFolder (strLOG_PATH & g_strAppName)
  End If

  Set objFolder = objFS.GetFolder(strLOG_PATH & g_strAppName)
  For Each objFile In objFolder.Files
    If (Now - objFile.DateCreated) > 60 Then
        objFile.Delete
    End If
  Next
  Set objFolder = Nothing
  Set objFS = Nothing
End Sub

Sub LogAction(ByVal strMsg As String)
  Dim objFS As FileSystemObject
  Dim objText As TextStream
  Set objFS = New Scripting.FileSystemObject

  Set objText = objFS.OpenTextFile(strLOG_PATH & g_strAppName & "\" & Format(Date, "yyyymmdd") & ".log", ForAppending, True)
  objText.WriteLine (Format(Time, "hh:mm:ss") & " - " & strMsg)
  objText.Close
  Set objText = Nothing
  Set objFS = Nothing
End Sub

Код будет работать, но, похоже, просто игнорирует все эти функции ведения журнала.Я знаю, что код правильный, потому что он работает в других библиотеках и exe, где я добавил модуль с этими подпрограммами.Я попытался добавить простую команду для регистрации непосредственно в журнале событий:

App.LogEvent strMsg

Но это не удалось.Если я пытаюсь перехватить ошибки в коде с помощью раздела Goto ErrorHandler:

ErrorHandler:
  App.LogEvent Err.Number & Err.Description

Приложение полностью завершается сбоем, так что я даже не могу выбрать какие-либо параметры после входа в веб-службу.Я знаю, что проблема не в том, что журнал приложения переполнен, поскольку в него продолжают добавляться новые события.Любые предложения или идеи о том, что является причиной этого, будут очень благодарны.

РЕДАКТИРОВАТЬ

Я ценю хорошие предложения, но они не решили проблему.Однако я определил, что по какой-то причине ему не нравится строка:

Set objFolder = objFS.GetFolder(strLOG_PATH & g_strAppName)

Если я удаляю это, как часть для удаления старых файлов, это работает.Я хотел бы иметь это там, чтобы не допустить скопления сотен файлов журналов на серверах повсюду.

END EDIT

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Может быть сбой при разрешении проблем. Я бы сделал следующее, не обязательно в этом порядке:

  • киньте ProcMon на проблему. Он быстро скажет вам, если вы даже пытаетесь написать. Также будут указаны проблемы с разрешениями.
  • Запустите VB6 в режиме администратора, если вы используете Vista или Win 7.
0 голосов
/ 15 апреля 2011

Я понял, что это было.После того, как он был частично исправлен, я смог выйти из системы, когда произошла ошибка.Он выдавал ошибку несоответствия типов, которую я отследил до нескольких определений для объекта папки.Исправленный код выглядит следующим образом:

Dim objFolder As Scripting.Folder

Это решило его.Спасибо за все комментарии!

...