как импортировать COM dll в D - PullRequest
4 голосов
/ 20 ноября 2011

Я пытаюсь создать приложение D, которое использует (сторонний) COM .dll, чтобы я мог очистить текстовое поле другого приложения, чтобы я мог выдать ошибку, когда появляется определенная строка.

Однако третья сторона не предоставляет .lib, .def или .h файлы, которые идут вместе с dll (по крайней мере, с бесплатной пробной версией).Я могу создать файл .lib с помощью инструмента implib , но я не вижу никаких функций библиотеки в созданном .lib.

В их (Visual C ++) примерах используется #import директива, чтобы связать это, однако, это бесполезно для меня ...

На примечании стороны, как я могу получить надлежащие интерфейсы (в .di с шаблоном, который выполняет связывание) dll автоматически?Я спрашиваю, поэтому правильность связывания не зависит от моего (вероятно, неправильного) перевода функций.У них есть веб-страница , которая предоставляет все функции, но объектная модель немного хаотична, если не сказать больше.

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

Хотя мне еще предстоит сделать работу над COM самостоятельно, я пытаюсь возродить Юнону на Github / he-the-great . Часть проекта - tlbimpd , которая выводит D-файл из DLL.

Я протестировал примеры и успешно запустил tlbimpd. Пожалуйста, попробуйте что-нибудь для своего использования и сообщите о любых проблемах.

1 голос
/ 20 ноября 2011

Из того, что я знаю, библиотеки COM предоставляют только несколько функций, необходимых для (отмены) регистрации библиотеки и создания объектов. Однако вы можете просматривать интерфейсы и функции в COM .dll с помощью OLE / COM Object Viewer . Кажется, он мог бы выводить файлы заголовков (.h). Впоследствии, возможно, вы могли бы использовать htod в качестве отправной точки для преобразования всего в интерфейсы D.

В дистрибутив DMD, похоже, входит пример .COM ( chello.d, dclient.d, dserver.d ), и на первый взгляд не похоже, что он явно потребует каких-либо LIB.

К сожалению, на самом деле я никогда не использовал COM в D, поэтому не могу давать дальнейшие советы. Надеюсь, это поможет каким-то образом.

...