QAxFactory Class
QAxFactory 클래스는 COM 컴포넌트 생성을 위한 팩토리를 정의합니다. 더 보기...
Header: | #include <QAxFactory> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS AxServer) target_link_libraries(mytarget PRIVATE Qt6::AxServer) |
qmake: | QT += axserver |
상속합니다: | QObject |
공용 형
enum | ServerType { SingleInstance, MultipleInstances } |
공용 함수
QAxFactory(const QUuid &libid, const QUuid &appid) | |
virtual | ~QAxFactory() override |
virtual QUuid | appID() const |
virtual QUuid | classID(const QString &key) const |
virtual QObject * | createObject(const QString &key) = 0 |
virtual bool | createObjectWrapper(QObject *object, IDispatch **wrapper) |
virtual QUuid | eventsID(const QString &key) const |
virtual QString | exposeToSuperClass(const QString &key) const |
virtual QStringList | featureList() const = 0 |
virtual bool | hasStockEvents(const QString &key) const |
virtual QUuid | interfaceID(const QString &key) const |
virtual bool | isService() const |
virtual const QMetaObject * | metaObject(const QString &key) const = 0 |
virtual void | registerClass(const QString &key, QSettings *settings) const |
virtual bool | stayTopLevel(const QString &key) const |
virtual QUuid | typeLibID() const |
virtual void | unregisterClass(const QString &key, QSettings *settings) const |
virtual bool | validateLicenseKey(const QString &key, const QString &licenseKey) const |
정적 공용 멤버
bool | isServer() |
bool | registerActiveObject(QObject *object) |
QString | serverDirPath() |
QString | serverFilePath() |
bool | startServer(QAxFactory::ServerType type = MultipleInstances) |
bool | stopServer() |
매크로
QAXCLASS(Class) | |
QAXFACTORY_BEGIN(IDTypeLib, IDApp) | |
QAXFACTORY_END | |
QAXFACTORY_EXPORT(Class, LibID, AppID) | |
QAXTYPE(Class) |
상세 설명
COM 서버에서 이 팩토리를 한 번 구현하여 서버가 생성할 수 있는 컴포넌트에 대한 정보를 제공합니다. QAxFactory를 서브클래싱하고 구현 파일(예: main.cpp)에서 순수 가상 함수를 구현한 다음 QAXFACTORY_EXPORT()
매크로를 사용하여 팩토리를 내보냅니다.
QStringList ActiveQtFactory::featureList() const { QStringList list; list << "ActiveX1"; list << "ActiveX2"; return list; } QObject *ActiveQtFactory::createObject(const QString &key) { if (key == "ActiveX1") return new ActiveX1(parent); if (key == "ActiveX2") return new ActiveX2(parent); return 0; } const QMetaObject *ActiveQtFactory::metaObject(const QString &key) const { if (key == "ActiveX1") return &ActiveX1::staticMetaObject; if (key == "ActiveX2") return &ActiveX2::staticMetaObject; } QUuid ActiveQtFactory::classID(const QString &key) const { if (key == "ActiveX1") return "{01234567-89AB-CDEF-0123-456789ABCDEF}"; ... return QUuid(); } QUuid ActiveQtFactory::interfaceID(const QString &key) const { if (key == "ActiveX1") return "{01234567-89AB-CDEF-0123-456789ABCDEF}"; ... return QUuid(); } QUuid ActiveQtFactory::eventsID(const QString &key) const { if (key == "ActiveX1") return "{01234567-89AB-CDEF-0123-456789ABCDEF}"; ... return QUuid(); } QAXFACTORY_EXPORT( ActiveQtFactory, // factory class "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID "{01234567-89AB-CDEF-0123-456789ABCDEF}" // application ID )
Q_CLASSINFO()
매크로를 사용하여 클래스의 고유 식별자 또는 기타 속성을 제공하는 경우 QAXFACTORY_BEGIN()
, QAXCLASS()
및 QAXFACTORY_END()
매크로를 사용하여 하나 이상의 클래스를 COM 개체로 노출할 수 있습니다.
QAXFACTORY_BEGIN( "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID "{01234567-89AB-CDEF-0123-456789ABCDEF}" // application ID ) QAXCLASS(Class1) QAXCLASS(Class2) QAXFACTORY_END()
ActiveX 서버 애플리케이션은 하나의 QAxFactory 구현만 인스턴스화하여 내보낼 수 있습니다. 이 인스턴스는 전역 qAxFactory() 함수를 통해 액세스할 수 있습니다.
팩토리는 registerClass() 및 unregisterClass() 함수를 다시 구현하여 레지스트리에서 ActiveX 컨트롤에 대한 추가 플래그를 설정할 수도 있습니다. 위젯 클래스가 부모 클래스에서 노출하는 메서드 또는 속성 수를 제한하려면 exposeToSuperClass() 함수를 다시 구현합니다.
QAxAggregated, QAxBindable, 및 ActiveQt 프레임워크도참조하십시오 .
멤버 유형 문서
enum QAxFactory::ServerType
이 열거형은 startServer 로 시작할 수 있는 다양한 유형의 서버를 지정합니다.
Constant | 값 | 설명 |
---|---|---|
QAxFactory::SingleInstance | 0 | 서버 프로세스는 내보낸 각 클래스의 인스턴스를 하나만 생성할 수 있습니다. COM은 각 요청에 대해 새 프로세스를 시작합니다. 일반적으로 생성 가능한 클래스를 하나만 내보내는 서버에서 사용됩니다. |
QAxFactory::MultipleInstances | 1 | 서버는 내보낸 각 클래스의 인스턴스를 여러 개 만들 수 있습니다. 이것이 기본값입니다. 모든 인스턴스는 동일한 스레드에 있으며 정적 리소스를 공유합니다. |
멤버 함수 문서
QAxFactory::QAxFactory(const QUuid &libid, const QUuid &appid)
각 인터페이스 함수의 구현에서 libid 및 appid 을 반환하는 QAxFactory 객체를 구축합니다.
[override virtual noexcept]
QAxFactory::~QAxFactory()
QAxFactory 객체를 삭제합니다.
[virtual]
QUuid QAxFactory::appID() const
이 함수를 다시 구현하여 ActiveX 서버의 애플리케이션 식별자를 반환합니다.
[virtual]
QUuid QAxFactory::classID(const QString &key) const
이 함수를 다시 구현하여 featureList() 구현에서 반환된 각 key 에 대한 클래스 식별자를 반환하거나 이 팩토리가 key 의 값을 지원하지 않는 경우 빈 QUuid 을 반환합니다.
기본 구현은 key 을 클래스 이름으로 해석하고 Q_CLASSINFO() 항목 "ClassID"의 값을 반환합니다.
[pure virtual]
QObject *QAxFactory::createObject(const QString &key)
이 함수를 다시 구현하여 key 에 대한 새 객체를 반환하거나 이 팩토리가 key 값을 지원하지 않는 경우 0을 반환합니다.
반환된 개체가 QWidget 인 경우 ActiveX 컨트롤로 노출되고, 그렇지 않은 경우 반환된 개체는 단순한 COM 개체로 노출됩니다.
[virtual]
bool QAxFactory::createObjectWrapper(QObject *object, IDispatch **wrapper)
이 함수를 다시 구현하여 wrapper 에서 object 에 대한 COM 객체를 제공합니다. 함수가 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
기본 구현은 object 의 메타 객체 정보를 기반으로 일반 자동화 래퍼를 생성합니다.
[virtual]
QUuid QAxFactory::eventsID(const QString &key) const
이 함수를 다시 구현하여 featureList() 구현에서 반환된 각 key 에 대한 이벤트 인터페이스의 식별자를 반환하거나 이 팩토리가 key 의 값을 지원하지 않는 경우 빈 QUuid 을 반환합니다.
기본 구현은 key 을 클래스 이름으로 해석하고 Q_CLASSINFO() 항목 "EventsID"의 값을 반환합니다.
[virtual]
QString QAxFactory::exposeToSuperClass(const QString &key) const
이 함수를 다시 구현하여 key 의 슈퍼 클래스 이름을 반환하면 ActiveX 컨트롤에서 메서드와 속성을 노출할 수 있습니다.
기본 구현은 key 을 클래스 이름으로 해석하고 Q_CLASSINFO()
항목 "ToSuperClass"의 값을 반환합니다. 이러한 값이 설정되어 있지 않으면 널 문자열이 반환되고 QWidget 을 포함한 모든 수퍼클래스의 함수와 프로퍼티가 노출됩니다.
클래스 자체의 함수와 속성만 노출하려면 이 함수를 다시 구현하여 key 을 반환합니다.
[pure virtual]
QStringList QAxFactory::featureList() const
이 함수를 다시 구현하여 이 팩토리에서 지원하는 위젯(클래스 이름) 목록을 반환합니다.
[virtual]
bool QAxFactory::hasStockEvents(const QString &key) const
이 함수를 다시 구현하여 ActiveX 컨트롤 key 이 표준 ActiveX 이벤트를 지원해야 하는 경우 true를 반환합니다.
- Click
- DblClick
- KeyDown
- KeyPress
- KeyUp
- MouseDown
- MouseUp
- MouseMove
기본 구현은 key 을 클래스 이름으로 해석하고 Q_CLASSINFO()
항목 "StockEvents"의 값이 "yes"인 경우 true를 반환합니다. 그렇지 않으면 이 함수는 false를 반환합니다.
[virtual]
QUuid QAxFactory::interfaceID(const QString &key) const
이 함수를 다시 구현하여 featureList() 구현에서 반환된 각 key 에 대한 인터페이스 식별자를 반환하거나 이 팩토리가 key 의 값을 지원하지 않는 경우 빈 QUuid 을 반환합니다.
기본 구현은 key 을 클래스 이름으로 해석하고 Q_CLASSINFO() 항목 "InterfaceID"의 값을 반환합니다.
[static]
bool QAxFactory::isServer()
애플리케이션이 (COM에 의해) ActiveX 서버로 시작된 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.
int main(int argc, char *argv[]) { QApplication app(argc, argv); if (!QAxFactory::isServer()) { // initialize for stand-alone execution } return app.exec(); }
[virtual]
bool QAxFactory::isService() const
서버가 영구 서비스(예: NT 서비스)로 실행 중이고 제공된 모든 개체가 해제된 경우에도 종료되지 않아야 하는 경우 이 함수를 재구현하여 참을 반환합니다.
기본 구현은 false를 반환합니다.
[pure virtual]
const QMetaObject *QAxFactory::metaObject(const QString &key) const
이 함수를 다시 구현하여 key 에 해당하는 QMetaObject 을 반환하거나 이 팩토리가 key 의 값을 지원하지 않는 경우 0 을 반환합니다.
[static]
bool QAxFactory::registerActiveObject(QObject *object)
QObject object 을 실행 중인 개체로 COM 에 등록하고 등록에 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 객체가 소멸되면 자동으로 등록이 해제됩니다.
이 함수는 사용자가 애플리케이션을 시작한 경우에만(즉, 요청에 응답하기 위해 COM이 아닌), 하나의 객체(일반적으로 애플리케이션의 객체 계층 구조의 최상위 객체)에 대해서만 호출해야 합니다.
이 함수는 아무 작업도 수행하지 않으며 "RegisterObject"에 대한 객체의 클래스 정보가 "yes"로 설정되어 있지 않거나 서버가 처리 중인 서버인 경우 false를 반환합니다.
[virtual]
void QAxFactory::registerClass(const QString &key, QSettings *settings) const
settings 객체를 사용하여 시스템 레지스트리에 key 클래스에 대한 추가 값을 등록합니다. 표준 값은 프레임워크에 의해 이미 등록되어 있지만 이 함수를 구현할 때 구현된 카테고리와 같은 추가 값을 추가할 수 있습니다.
settings->setValue("/CLSID/" + classID(key) + "/Implemented Categories/" + "/{00000000-0000-0000-000000000000}/.", QString());
이 함수를 다시 구현하는 경우 unregisterClass()도 다시 구현하여 추가 레지스트리 값을 제거해야 합니다.
QSettings 를참조하세요 .
[static]
QString QAxFactory::serverDirPath()
서버 바이너리가 포함된 디렉터리를 반환합니다.
처리 중이 아닌 서버의 경우 QCoreApplication::applicationDirPath()와 동일합니다. 처리 중인 서버의 경우 이 함수는 호스팅 애플리케이션이 포함된 디렉터리를 반환합니다.
[static]
QString QAxFactory::serverFilePath()
서버 바이너리의 파일 경로를 반환합니다.
처리 중이 아닌 서버의 경우 QCoreApplication::applicationFilePath()와 동일합니다. 처리 중인 서버의 경우 이 함수는 호스팅 애플리케이션의 파일 경로를 반환합니다.
[static]
bool QAxFactory::startServer(QAxFactory::ServerType type = MultipleInstances)
type 으로 COM 서버를 시작하고 성공하면 참을 반환하고 그렇지 않으면 거짓을 반환합니다.
서버가 이미 실행 중인 경우(또는 처리 중인 서버의 경우) 이 함수를 호출하면 아무 작업도 수행하지 않고 참을 반환합니다.
서버 실행 파일이 -activex
명령줄 매개 변수를 사용하여 시작된 경우 type 가 MultipleInstances
로 설정되어 서버가 자동으로 시작됩니다. SingleInstance 로 전환하려면
if (QAxFactory::isServer()) { QAxFactory::stopServer(); QAxFactory::startServer(QAxFactory::SingleInstance); }
를 호출합니다.
[virtual]
bool QAxFactory::stayTopLevel(const QString &key) const
이 함수를 다시 구현하여 ActiveX 컨트롤( key )이 최상위 창(예: 대화 상자)이어야 하는 경우 참을 반환합니다. 기본 구현은 false를 반환합니다.
[static]
bool QAxFactory::stopServer()
COM 서버를 중지하고 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
서버가 실행 중이 아니거나 처리 중인 서버의 경우 이 함수를 호출하면 아무 작업도 수행하지 않고 참을 반환합니다.
서버를 중지해도 기존 개체가 무효화되지는 않지만 기존 서버 프로세스에서 새 개체를 만들 수는 없습니다. 일반적으로 COM은 추가 개체가 요청되면 새 서버 프로세스를 시작합니다.
main() 함수가 반환되면 서버는 자동으로 중지됩니다.
[virtual]
QUuid QAxFactory::typeLibID() const
이 함수를 다시 구현하여 ActiveX 서버의 유형 라이브러리 식별자를 반환합니다.
[virtual]
void QAxFactory::unregisterClass(const QString &key, QSettings *settings) const
settings 객체를 사용하여 시스템 레지스트리에서 key 클래스에 대한 추가 값을 등록 취소합니다.
settings->remove("/CLSID/" + classID(key) + "/Implemented Categories" + "/{00000000-0000-0000-000000000000}/.");
registerClass() 및 QSettings도 참조하세요 .
[virtual]
bool QAxFactory::validateLicenseKey(const QString &key, const QString &licenseKey) const
licenseKey 이 key 클래스에 대한 유효한 라이선스이거나 현재 머신에 라이선스가 있는 경우 이 함수를 다시 구현하여 참을 반환합니다.
기본 구현은 key 클래스가 라이선스가 없는 경우(즉, Q_CLASSINFO()
속성 "LicenseKey" 없음), licenseKey 이 "LicenseKey" 속성 값과 일치하는 경우 또는 이 COM 서버와 파일 이름이 같은 .LIC 파일을 통해 머신에 라이선스가 부여된 경우 참을 반환합니다.
매크로 문서
QAXCLASS(Class)
이 매크로는 QAXFACTORY_BEGIN() 매크로로 선언된 QAxFactory 에 생성 가능한 COM 클래스 Class 를 추가합니다.
QAXFACTORY_BEGIN(), QAXTYPE(), QAXFACTORY_END() 및 Q_CLASSINFO()도 참조하세요 .
QAXFACTORY_BEGIN(IDTypeLib, IDApp)
이 매크로는 암시적으로 선언된 QAxFactory 구현을 통해 여러 개의 QObject 클래스를 내보내는 데 사용할 수 있습니다. 모든 QObject 클래스는 Q_CLASSINFO() 매크로를 통해 ClassID, InterfaceID 및 EventsID(해당되는 경우)를 선언해야 합니다. 모든 선언은 ID가 IDTypeLib 인 유형 라이브러리에 있으며, 서버가 실행 서버인 경우 애플리케이션 ID가 IDApp 입니다.
이 매크로는 QAXCLASS(), QAXTYPE() 및 QAXFACTORY_END() 매크로와 함께 사용해야 합니다.
QAXFACTORY_BEGIN( "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID "{01234567-89AB-CDEF-0123-456789ABCDEF}" // application ID ) QAXCLASS(Class1) QAXCLASS(Class2) QAXFACTORY_END()
QAXFACTORY_END
QAXFACTORY_BEGIN() 매크로로 시작한 QAxFactory 선언을 완료합니다.
QAXFACTORY_BEGIN(), QAXCLASS() 및 QAXTYPE()도 참조하세요 .
QAXFACTORY_EXPORT(Class, LibID, AppID)
이 매크로는 COM 서버에서 QAxFactory 구현 Class 을 내보내는 데 사용할 수 있습니다. 모든 선언은 ID가 LibID 인 유형 라이브러리에 있으며 서버가 실행 가능한 서버인 경우 애플리케이션 ID가 AppID 입니다.
QAXFACTORY_EXPORT( MyFactory, // factory class "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID "{01234567-89AB-CDEF-0123-456789ABCDEF}" // application ID )
QAXFACTORY_BEGIN()도 참조하세요 .
QAXTYPE(Class)
이 매크로는 QAXFACTORY_BEGIN()로 선언된 QAxFactory 에 생성할 수 없는 COM 클래스 Class 를 추가합니다. Class 클래스는 QAXTYPE() 또는 QAXCLASS()을 통해 내보낸 다른 COM 클래스의 API에서 사용할 수 있습니다.
Class 유형의 인스턴스는 이미 인스턴스화된 객체의 API를 통해서만 검색할 수 있습니다.
QAXFACTORY_BEGIN(), QAXCLASS(), QAXFACTORY_END() 및 Q_CLASSINFO()도 참조하세요 .
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.