QAxFactory Class
QAxFactory 클래스는 COM 컴포넌트를 생성하기 위한 팩토리를 정의합니다. 더 보기...
| 헤더: | #include <qaxfactory.h> |
| 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 Framework항목도 참조하십시오 .
멤버 유형 문서
enum QAxFactory::ServerType
이 열거형은 ` startServer`를 사용하여 시작할 수 있는 다양한 서버 유형을 지정합니다.
| 상수 | 상수 | 설명 |
|---|---|---|
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 개체를 제공하기 위해 이 함수를 재구현하십시오. 함수 호출이 성공하면 true를 반환하고, 그렇지 않으면 false를 반환하십시오.
기본 구현은 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
이 함수를 재구현하여, ActiveX 컨트롤이 메서드와 속성을 노출해야 하는 key 의 최상위 슈퍼클래스 이름을 반환하도록 하십시오.
기본 구현은 key 를 클래스 이름으로 해석하고, Q_CLASSINFO() 항목의 "ToSuperClass" 값을 반환합니다. 해당 값이 설정되어 있지 않으면 빈 문자열이 반환되며, QWidget 를 포함한 모든 상위 클래스의 함수와 속성이 노출됩니다.
해당 클래스 자체의 함수와 속성만 노출하려면, 이 함수를 재구현하여 key 를 반환하도록 하십시오.
[pure virtual] QStringList QAxFactory::featureList() const
이 함수를 재구현하여 이 팩토리에서 지원하는 위젯(클래스 이름)의 목록을 반환하도록 하십시오.
[virtual] bool QAxFactory::hasStockEvents(const QString &key) const
key ActiveX 컨트롤이 표준 ActiveX 이벤트를 지원해야 하는 경우 true를 반환하도록 이 함수를 재구현하십시오.
- Click
- DblClick
- KeyDown
- KeyPress
- KeyUp
- 마우스 클릭
- 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 서비스)로 실행 중이고 제공된 모든 객체가 해제된 후에도 종료되어서는 안 되는 경우 true를 반환하도록 하십시오.
기본 구현은 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 서버를 시작하며, 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
서버가 이미 실행 중일 때(또는 인-프로세스 서버의 경우) 이 함수를 호출하면 아무 작업도 수행하지 않고 true를 반환합니다.
서버 실행 파일이 -activex 명령줄 매개변수와 함께 시작된 경우, ` type `가 ` MultipleInstances `로 설정되어 서버가 자동으로 시작됩니다. ` SingleInstance`로 전환하려면
if (QAxFactory::isServer()) {
QAxFactory::stopServer();
QAxFactory::startServer(QAxFactory::SingleInstance);
}를 호출하십시오.
[virtual] bool QAxFactory::stayTopLevel(const QString &key) const
key ActiveX 컨트롤이 최상위 창(예: 대화 상자)이어야 하는 경우 true를 반환하도록 이 함수를 재구현하십시오. 기본 구현은 false를 반환합니다.
[static] bool QAxFactory::stopServer()
COM 서버를 중지하며, 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
서버가 실행 중이 아닐 때(또는 인-프로세스 서버의 경우) 이 함수를 호출하면 아무 작업도 수행하지 않고 true를 반환합니다.
서버를 중지해도 기존 객체의 유효성은 유지되지만, 기존 서버 프로세스에서는 새로운 객체를 생성할 수 없습니다. 일반적으로 추가 객체가 요청되면 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 클래스에 대한 유효한 라이선스이거나, 현재 컴퓨터에 라이선스가 부여된 경우 true를 반환하도록 이 함수를 재구현하십시오.
기본 구현은 key 클래스에 라이선스가 부여되지 않은 경우(즉, Q_CLASSINFO() 속성 "LicenseKey"가 없는 경우), licenseKey 가 "LicenseKey" 속성의 값과 일치하는 경우, 또는 이 COM 서버와 동일한 파일 이름을 가진 .LIC 파일을 통해 컴퓨터에 라이선스가 부여된 경우 true를 반환합니다.
매크로 설명서
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()도 참조하십시오 .
© 2026 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.