2012-10-09 2 views
16

Qt GUI 라이브러리를 VST 플러그인의 사용자 인터페이스로 사용하고 싶습니다. VST 플러그인은 Windows의 DLL입니다. 호스트 응용 프로그램은 openGUI()을 포함하여 DLL의 다양한 함수를 호출합니다.DLL (QST 플러그인)의 Qt GUI 환경

DLL에서 Qt GUI를 사용하는 방법을 알고 싶습니다. 가능한 옵션을 조사하기 위해 일부 조사를했지만 한계에 대해 완전히 확신하지 못했습니다.

가장 큰 문제는 QApplication 개체를 만들고 여기에 exec() (응용 프로그램을 종료 할 때까지 반환되지 않는 함수)을 호출하는 위치입니다.

this post에 제공된 솔루션을 살펴 보았지만 추가 읽기 후에는 Mac OS X에서이 솔루션이 작동하지 않는 것으로 나타났습니다. 코코아는 GUI를 실행할 수있는 특정 스레드에 대해 더 제한적입니다. 정말로 약간의 해킹입니다.

나는 또한 this solution을 보았지만, 더 이상 Qt 라이브러리의 일부로 보이지 않는 QMfcAppQWinWindow에 의존합니다.

내 DLL이 새 응용 프로그램 자체를 생성하는 유일한 방법입니까? 아마도 QProcess에 대한 호출로 하나를 시작하고 GUI 응용 프로그램과 내 VST DLL간에 공유하기 위해 공유 메모리를 사용할 수 있습니까? 누구든지 이런 유형의 문제에 직면 해 있습니까? 나는 이것으로 나쁜 길을 가나, 아직 내가 생각하지 못했던 것이 있는가?

업데이트

추가 연구 후에 나는 QAbstractEventDispatcher 클래스 건너왔다. 나는 QApplication::exec()을 호출하는 대신 자신의 (내 플러그인 호스트) 이벤트 루프에서 QApplication::processEvents()을 호출하는 것이 가능하다고 말하는 것 같습니다. this post을 보았습니다. 누구든지이 일을 시도 했습니까?

+0

나는 창문 (별도의 스레드가있는 첫 번째 솔루션)에서이 작업을 수행했습니다. 금지 된 dllmain에서 별도의 스레드를 실행해야하기 때문에 정말 어려웠습니다. QMfcApp는 Qt에 포함 된 적이 없으며 "솔루션"이라고 불립니다. 여기 http://qt.gitorious.org/qt-solutions/qt-solutions/trees/master/qtwinmigrate에서 찾으십시오. 행운을 빕니다! –

답변

5

Windows에서 작동하는 것으로보고 된 이후로 실제 문제가 Mac에서 VST 플러그인에 사용되는 것처럼 보입니다. - here (full source tree)과 here을 참조하십시오.

in the Qt forums에 VST 플러그인 용 Qt를 사용한 성공적인 사례가 있지만 다른 문제는 같은 문제에 open bug입니다.

나는 귀하의 질문에 대답하지 않는다는 것을 알고 있지만, JUCEWDL과 같이 VST 플러그인에 더 적합한 다른 UI 라이브러리를 사용하는 것이 좋습니다.

+0

다른 라이브러리, 아마도 언급 한 두 라이브러리가 실제로이 문제를 해결하고 있는지 궁금합니다. 나는 현재 크로스 플랫폼 GUI 라이브러리가 비슷한 유형의 플러그인에 사용되는지 조사 중이다. 누군가 특정 라이브러리를 사용할 가능성이있는 링크가 있다면 그것에 대해 듣고 싶습니다. – John

2

VST DLL에서 Qt 프로세스를 실행 한 다음 IPC를 사용하여 메모리를 공유하거나 메시지 전달 등을 사용합니다.

0

Microsoft는 흥미로운 문서를 발표했습니다. "Best Practices for Creating DLLs" DllMain 외부에서 DLL을 초기화, 시작, 중지 및 해제하는 특정 API를 개발하는 것이 좋습니다.

+0

dll main에서 스레드를 실행할 수 없습니다. 실제로 스레드가 DLL_PROCESS_DETACH에서 중지 될 때까지 기다리는 경우 엔 끝까지 블록됩니다. –

+0

"DLL을 만드는 최상의 방법"문서 (http://msdn.microsoft.com /en-us/windows/hardware/gg487379.aspx)는 "다른 스레드와 동기화하지 않으면 스레드를 만들 수 있지만 위험합니다."라고 말합니다. – Aubin

+0

정말 잘 작동하지 않을 수 있습니다 아닌가요? VST 플러그인 API에 익숙하지 않지만 init 함수 나 생성자 호출과 같은 일종의 활성화가 있다고 가정합니다. 왜 Qt 쓰레드를 실행하지 않습니까? –

1

너는 이것으로 나쁜 길을 가고 있니? 당신이 무료 VST 플러그인을 개발하고 있다면 반드시 그런 것은 아닙니다. 그러나 일반적인 소프트웨어 개발을 위해 Qt를 사용하는만큼 VST 개발에는 적합하지 않습니다. 그것의 라이센스는 당신이 그것을 지불하지 않는 한 당신이 정적으로 상업적 사용을 위해 그것의 라이브러리로 DLL을 링크 할 수 없다는 것이다; 그리고 그것은 꽤 비싸다. 그들이 LGPL을 만들었을 때, 대상 프로그램이나 DLL 디렉토리에있는 독립 실행 형 상용 프로그램을 위해 12 개의 DLL에 쉽게 종속되는 모든 종속성을 넣을 수있게 만들었습니다. 실행되고 팔릴 수 있습니다 상업적으로.

VST 사용자는 주변에서 효과를 이동시키기 위해 DLL을 약하게 움직이는 데 익숙합니다. 그들은 LGPL 하에서 움직일 사람이 하나도 없을 수 있습니다. 검사 할 여분의 DLL이 많이있는 디렉터리를 쓸어 내면 검사 프로세스가 느려집니다. 하나의 DLL에 플러그인을 생성 할 수없고 지불하지 않고 정적으로 QT 라이브러리와 링크 할 수 없기 때문에 VST 플러그인으로 폴더에 많은 의존성을 갖는 것은 상업용 플러그인에서 다른 상업용 응용 프로그램과 같이 잘 작동하지 않습니다 Qt를 많이 사용하거나 GPL 또는 일부를 만드는 등의 작업을 수행 할 수 있습니다.