DLL.NET с Com взаимодействует по-разному, если загружается IIS 6.0 или объектом, созданным в VB6 - PullRequest
2 голосов
/ 08 мая 2019

Я борюсь с очень любопытным явлением.

Я работаю с устаревшим веб-приложением, работающим на 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, но я все еще смущен этим ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...