VB6 dll в COM + Sub Main не вызывается - PullRequest
1 голос
/ 26 мая 2020

VB6 dll с именем SimpleBO с модулем (.bas) и Sub Main имеет следующий код

Public gsConnectionString As String

Sub Main()
    Dim constr As String
    constr = getConStr() 'get it from a file
    gsConnectionString = constr
    LogToFile "At main after getting constr showing gsConnectionString " & gsConnectionString 'logToFile simply writes a line in a file
    ....
    Exit Sub
    ... Error handler
Exit sub

Модуль также имеет метод publi c:

Public Function GetConnectionEnterprise() As String
   GetConnectionEnterprise = gsConnectionString
Exit Function

В dll есть класс SystemBO с различными методами, включая:

Public Function Connection() As String
    Connection = GetConnectionEnterprise
Exit Function

Затем у VB6 exe также есть модуль с Sub Main при запуске.
Он ссылается на dll и имеет это код во вспомогательной основной части:

Public gsConnectionString as String

Sub Main()
    Dim oBO As SimpleBO.SystemBO
    Set oBO = New SimpleBO.SystemBO
    gsConnectionString = oBO.Connection
    LogToFile "InTestBOSimple:ModStartUpForTestBOSimple:Main gsConnectionString " & gsConnectionString
    frmTestBO1.Show
    Set oBO = Nothing
    Exit Sub

VB6 добавляется как компонент COM +.

Первый тест на компьютере Windows 10 - запуск exe.

Файл журнала показывает:

SimpleBO:modStartUp:Main At main after getting constr showing gsConnectionString Provider=sqlOLEDB;Data ...

Затем

InTestBOSimple:ModStartUpForTestBOSimple:Main gsConnectionString Provider=sqlOLEDB;Data Source

Ожидаемые результаты. Вызывается Sub Main dll.

Затем установите dll и exe на Windows Server 2012, работающий на виртуальной машине.

DLL устанавливается в Com + с той же настройкой.

Затем при запуске exe (который работает без ошибок) файл журнала не показывает, что был вызван Sub Main dll, а только показывает:

InTestBOSimple:ModStartUpForTestBOSimple:Main gsConnectionString (blank)

Значение вызова to oBO.Connection, что не привело к ошибке, ничего не вернуло, что также показывает, что Sub Main dll не был вызван.

Я пробовал разные вещи - переустановил com + с нуля на сервере, но тот же проблемы.

Я попытался добавить код в exe, который имеет форму, и при нажатии кнопки появляется

Private Sub cmdGetCN_Click()
    Dim oBO As SimpleBO.SystemBO
    Dim cn As String
    Set oBO = New SimpleBO.SystemBO
    cn = oBO.Connection
    lblMessage.Caption = "cn = " & cn
    Exit Sub

сообщение показывает CN = (и пустое поле после него).

Были ли у кого-нибудь проблемы такого типа?
Спасибо

...