2012-02-13 1 views
1

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

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

ответ

3

Вы можете использовать mktyplib.exe составить обычай "прямой контроль" TypeLib как этот

[ 
    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 CoClass вдоль 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 является «comm control» на Form1.

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

+0

Вау - Я так хочу попробовать. Благодаря! –

1

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

+0

Это правильно, вам не нужно добавлять его в оба места. – tcarvin

+0

Да, но если я добавлю его как компонент, то я не могу создать новый объект из класса Set comm = new MComm 'does not work Я могу использовать только визуальный компонент в форме.И если я только добавлю ссылку, то я могу создать новые, но те, которые раньше были в формах, преобразуются в PictureBox-es ... –

-2

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

+0

Мой вопрос касается компонентов и ссылок, используемых вместе, а не об пользовательских контролях. –

+0

И мой ответ состоял в том, чтобы не использовать класс в качестве контрольной оболочки. Для этого у нас есть UserControls. – Bob77

1

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

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

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

private withevents comm as MSComm 

их создание в _load

set comm = new MSComm 

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

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

Я на 90% уверен, что это не так для mscomm, но лучше всего тестировать в любом случае.

+0

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

Смежные вопросы