Могу ли я использовать ту же библиотеку в VB6 в качестве компонента и ссылки? - PullRequest
1 голос
/ 13 февраля 2012

Я хотел бы использовать элемент управления Winsock Comm.Некоторые формы использовали его как элемент управления для формы (компонента), но у меня также есть некоторые классы, которые имеют ссылки и создали новый объект MSComm.

Это похоже на ошибку с VB6.Вы можете добавить его как компонент или ссылку.Есть ли способ сделать оба в одном проекте?

Ответы [ 4 ]

3 голосов
/ 14 февраля 2012

Вы можете использовать mktyplib.exe для компиляции пользовательской библиотеки типов "direct control", подобной этой

[
  uuid(<<GUID_HERE>>),
  version(1.0),
  helpstring("Direct Controls Typelib 1.0")
]
library DirectControls10
{
    importlib("C:\\WINDOWS\\system32\\mscomm32.ocx");

    typedef [public] MSCommlib.MSComm DirectMSComm;
}

После того, как вы ссылаетесь на DirectControls10 в своем проекте, вы можете использовать DirectMSComm кокласс вдоль MSCommlib.MSComm usercontrolкак это

Private WithEvents m_oComm      As DirectMSComm

Private Sub Form_Load()
    Set m_oComm = New DirectMSComm
    Set m_oComm = CreateObject("MSCommlib.MSComm")
    Set m_oComm = MSComm1.Object
End Sub

Private Sub m_oComm_OnComm()
    Debug.Print "m_oComm_OnComm"; Timer
End Sub

... где в приведенном выше примере MSComm1 является «контролем связи» на Form1.

Вы не имеетераспространять этот пользовательский файл .tlb среди своих клиентов.Используйте его только на своих устройствах разработки.

1 голос
/ 14 февраля 2012

Вы говорите о Winsock или MSComm?

Если это последнее, удалите компонент из форм, а затем удалите его как компонент в наборе инструментов.

Добавьте его в качестве ссылки и в формах, где ранее были компоненты, объявите экземпляр вручную;

private withevents comm as MSComm

создайте их в _load

set comm = new MSComm

, и все ваши события должны бытьподключен, если имя переменной совпадает.

Если это компонент Winsock, то самый простой способ - использовать компонент OCX и при необходимости передать ссылку из формы в класс, поскольку вы не можете надежно установить это.раннее связывание компонента winsock;set wsck1 = new winsock скомпилируется и будет работать нормально, но на любом компьютере без установленного VB6 произойдет сбой, так как компонент winsock выполняет проверку лицензии каждый раз, когда создается таким образом.

Я на 90% уверен, что это не такmscomm, но лучше все-таки проверить.

1 голос
/ 13 февраля 2012

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

0 голосов
/ 13 февраля 2012

UserControl в любом случае является специализированной формой Class, поэтому, чтобы обернуть элемент управления, вы создаете UserControl. Вы можете легко сделать неконтролируемый пользовательский интерфейс невидимым во время выполнения с помощью четко названного свойства InvisibleAtRuntime.

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