Я борюсь с очень любопытным явлением.
Я работаю с устаревшим веб-приложением, работающим на IIS 6.0 SP2, и я хотел, чтобы оно могло использовать .NET API (Aspose.Слова).
Я написал COM-видимую DLL-библиотеку .NET, которую я могу использовать как с IIS с CreateObject("MyDll.MyClass")
, так и с двоичным файлом, созданным с помощью VB6, как DLL или исполняемый файл (с CreateObject
или статической ссылкой на проект).к TypeLib).
Странная часть в том, что я испытываю различное поведение в зависимости от источника загрузки.Процесс может успешно , если DLL-библиотека .NET называется из двоичного файла VB6 и завершается с ошибкой , если из IIS .
Один и тот же код, один и тот же вход, выход отличается.
Мой вопрос: Двоичные файлы IIS и VB6 по-разному обрабатывают загрузку COM Visible DLL?
Я не вижу ни одного образца MCVE, который мог бы произвести.Класс COM-Visible представлен через тривиальные строки:
<InterfaceType(ComInterfaceType.InterfaceIsDual)> Public Interface IComObject
Sub processSomething(docPath as String)
' [...]
End Interface
Также сбойный процесс очень специфичен для упакованного API.
Private Function retrieveTOCEntries(ByVal doc As Words.Document, ByVal documentBodyFileURL As String) As TocEntry()
Dim entries As List(Of TocEntry) = New List(Of TocEntry)
For Each field As Words.Fields.Field In doc.Range.Fields
If Not field.Type.Equals(Aspose.Words.Fields.FieldType.FieldPageRef) Then Continue For
Dim pageRef As Words.Fields.FieldPageRef = CType(field, Words.Fields.FieldPageRef)
If pageRef.BookmarkName Is Nothing OrElse Not pageRef.BookmarkName.StartsWith("_Toc") Then Continue For
Dim tocItem As Words.Paragraph = CType(field.Start.GetAncestor(Words.NodeType.Paragraph), Words.Paragraph)
field.Remove()
' Here the change: b could be Nothing with IIS
' and not Nothing with a VB6 binary for the same input
Dim b As Words.Bookmark = doc.Range.Bookmarks(pageRef.BookmarkName)
End For
End Function
Я решил свою проблему, проверивничто из b
, но я все еще смущен этим ...