Тема: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

Задаю вопрос именно в этом разделе, т. к. если на него ответят, то только здесь.
В АКАДе 2000-2006 можно было использовать следующие функции:

Private Declare Function ProgressMeter Lib "acad.exe" Alias "?acedSetStatusBarProgressMeter@@YAHPBDHH@Z" (ByVal strCaption As String, ByVal intmin As Integer, ByVal intmax As Integer) As Boolean
Private Declare Function SetProgBarPos Lib "acad.exe" Alias "?acedSetStatusBarProgressMeterPos@@YAHH@Z" (ByVal intVal As Integer) As Boolean
Private Declare Function RestoreStatus Lib "acad.exe" Alias "?acedRestoreStatusBar@@YAXXZ" () As Boolean

При попытке их использования в 2007 выдаются ошибки:
ProgressMeter - 453, Can't find DLL entry point ?acedSetStatusBarProgressMeter@@YAHPBDHH@Z in acad.exe.
SetProgBarPos - 49, Bad DLL calling convention.
Очевидно, что они никуда не делись. Где можно посмотреть их описание для 2007?

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

> BP
Для первой функции в AutoCAD 2007 алиас: "?acedSetStatusBarProgressMeter@@YAHPB_WHH@Z"
С второй вроде все должно быть в порядке.

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

P.S.: Кстати, а использовать ты их собираешься в VBA или в VB.NET? Так как первая функция требует передачи строки в UNICODE-кодировке, то (IMHO) в VBA это сделать нельзя.

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

> Александр Ривилис
Большое спасибо за ответ (писал в надежде, что именно Вы ответите), в понедельник будем пробывать.

Кстати, а использовать ты их собираешься в VBA или в VB.NET?

Привлекало именно безгеморройное использование этой (и других) функций в VBA. В VB (VB.NET) их использование, в связи с некоторой сложностью вызова, меня не привлекает. Так что, если Вы окажетесь правы, придется искать обходные маневры.

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

Я поигрался немного с этими функциями. Если поставить:

On Error Resume Next

то функции работают, но вместа текста в прогрессбаре - абракадабра. Это из-за unicode-строк. Как правильно передать уникодовские строки из VBA - не знаю (на VBA не пишу).
Но я сделал проще:

Private Declare Function SetStatusBarProgressMeter Lib "ProgressBars2007.arx" (ByVal strCaption As String, ByVal intmin As Integer, ByVal intmax As Integer) As Boolean
Private Declare Function SetStatusBarProgressMeterPos Lib "ProgressBars2007.arx" (ByVal intVal As Integer) As Boolean
Private Declare Function RestoreStatusBar Lib "ProgressBars2007.arx" () As Boolean
Sub TestProgress()
' ProgressBars2007.arx должен быть загружен в AutoCAD.
' Если он не в путях доступа, то нужно загружать его с полным путем
 Application.LoadArx ("ProgressBars2007.arx")
 Call SetStatusBarProgressMeter("Прогрессбар", 0, 100)
 Dim s As String
 For counter = 0 To 100
    Call SetStatusBarProgressMeterPos(counter)
    s = Application.ActiveDocument.Utility.GetString(0, "----- Нажми пробел для продолжения -----")
 Next
 Call RestoreStatusBar
End Sub

Думаю, разберешься. :) А arx-файл для этих нужд можно взять здесь из архива: http://www.maestrogroup.com.ua/support/ProgressBars.zip
Сразу предупрежу, что экспорт функций для работы с прогрессбаром в VBA сделан только в ProgressBars2007.arx
P.S.: Извиняюсь за корявый пример на VBA - я на нем не пишу, поэтому сляпал как смог.

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

Ага! Кажется я реабилитировался! biggrin
Нашел! В VBA можно работать с уникодовскими строками. Мой arx-не нужен:

Private Declare Function ProgressMeter Lib "acad.exe" Alias "?acedSetStatusBarProgressMeter@@YAHPB_WHH@Z" (ByVal strCaption As String, ByVal intmin As Integer, ByVal intmax As Integer) As Boolean
Private Declare Function SetProgBarPos Lib "acad.exe" Alias "?acedSetStatusBarProgressMeterPos@@YAHH@Z" (ByVal intVal As Integer) As Boolean
Private Declare Function RestoreStatus Lib "acad.exe" Alias "?acedRestoreStatusBar@@YAXXZ" () As Boolean
Sub TestProgress()
 On Error Resume Next
 Dim s As String
 s = StrConv("Строка названия прогрессбара:", vbUnicode)
 Call ProgressMeter(s, 0, 100)
 For counter = 0 To 100
    Call SetProgBarPos(counter)
    s = Application.ActiveDocument.Utility.GetString(0, "----- Нажимай пробел для продолжения")
 Next
 Call RestoreStatus
End Sub

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

Александр Ривилис пишет:

StrConv("Строка названия прогрессбара:", vbUnicode)

Ну так я думал, только проверить не было на чем, а Вы уже все сделали. Спасибо.

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

> BP
Я же написал, что на VBA не программирую. Пришлось искать в справке. :)

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

> cvdsffsdf
Видимо модераторы в отпуске, реклама пошла.

> Александр Ривилис
Ответьте пожалуйсто почему при декларации вы используете в Alias билеберду
"?acedSetStatusBarProgressMeter@@YAHPBDHH@Z"
а не просто номер функции?
И другой вопрос.
В разделе VBA
https://www.caduser.ru/forum/topic4358.html
мною был дан код работы с функцией современного диалогового окна выбора цвета.
Но на VBA нельзя получить имён цвета и его библиотеки по возвращённому данной функцией адресу.
Поэтому вопрос к программистам ObjectARX, как это можно сделать вашими методами программирования.

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

> Dron
1) Номер функции может менятся между версиями AutoCAD, а алиас ("билебирда") менятся не будет пока не изменят параметры функции.
2) На второй вопрос поговорим в той ветке.

Re: Как осуществить в AutoCAD 2007 использование функций ACAD.EXE?

> Александр Ривилис
К сожалению вы подтвердили мои опасения по 1-му вопросу.