Загрузка COM DLL (без заголовков) в QT с C ++? - PullRequest
1 голос
/ 31 января 2012

Я только начал использовать QT. Сейчас мне нужно перенести некоторый код, который у меня есть в проекте Visual C ++, на QT.

Единственное, что в данный момент делает проект, - это открывает Photoshop и устанавливает флаг visible в значение false (он будет использоваться для автоматизации, поэтому многие вещи будут добавлены позже).

Что я делаю, так это импортирую 2 dll для фотошопа (ПРИМЕЧАНИЕ: у меня нет .h или .lib для них, только файлы .dll) Метод, который я использую для импорта этих библиотек, заключается в импорте libid, поскольку все остальные методы, которые я пробовал, не работали. Это COM-объекты, кстати.

Это мой код VC ++:

//library ID of Photoshop.dll
#import "libid:E891EE9A-D0AE-4cb4-8871-F92C0109F18E" 
//library ID of PhotoshopTypeLibrary.dll
#import "libid:4B0AB3E1-80F1-11CF-86B4-444553540000" 

int main()
{
    Photoshop::_ApplicationPtr app( __uuidof(Photoshop::Application));
    app->Visible = false;

    return 0;
}

Теперь я использую QT Creator с MinGW для компиляции этого кода, и он дает мне несколько предупреждений и ошибок в строках импорта:

warning: #import is a deprecated GCC extension
error: libid:E891EE9A-D0AE-4cb4-8871-F92C0109F18E: No such file or directory

И затем, после этого, он говорит (очевидно), что «Фотошоп» не объявлен.

Теперь я искал, и самым близким решением, которое я нашел, было включение файлов .tlh, которые были созданы в моем проекте VC ++, но когда я это сделал, я получил более 1 тысячи ошибок и предупреждений, так что, очевидно, не работа.

Может кто-нибудь сказать мне, что здесь делать? Я серьезно застрял!

1 Ответ

1 голос
/ 31 января 2012

#import - это расширение Microsoft, которое можно использовать для импорта библиотек COM в VisualC ++.

Судя по вашему вопросу, у вас есть доступ к VisualC ++, но ваш код QT скомпилирован с помощью gcc.

Если вы создаете простой проект в VisualC ++, вы можете добавить код #import и скомпилировать его. Вы обнаружите, что компилятор сгенерировал файлы .tlh и .tli. Эти файлы содержат всю информацию, необходимую для использования библиотеки COM, и могут использоваться любым компилятором.

Затем вы можете скопировать эти файлы в каталог вашего проекта gcc и использовать #include (не #import) для этих сгенерированных файлов.

.tlh эквивалентен заголовку c ++, .tli больше похож на файл .cpp.

...