Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBCDeclFix - Add-in позволяющий работать с CDecl функциями / 8 сообщений из 8, страница 1 из 1
17.02.2021, 15:32
    #40046306
ATM-TURBO 2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
Этот Add-in позволяет использовать CDecl функции в VB6 как в библиотеках типов так и в с использованием ключевого CDecl в Declare. Также данный Addi-in позволяет определить CDecl функции в стандартных модулях по типу:
Код: vbnet
1.
Function XXX CDecl (...)



Если кто-нибудь когда-нибудь пытался использовать CDECL функции объявленные в библиотеке типов то наверняка знает что отладка невозможна. Проект даже не стартует, а среда падает еще на этапе компиляции, хотя компиляция в нативный код работает без проблем. Похожая проблема с ключевым словом CDecl - рантайм всегда генерирует ошибку 0x31 (Bad Dll Calling Convention) и не получится использовать такие функции ни в IDE ни в скомпилированном коде. Этот Add-in исправляет эти проблемы и позволяет отлаживать код как в IDE, так и компилировать его в исполняемый файл.

https://github.com/thetrik/VBCDeclFix
...
Рейтинг: 0 / 0
18.02.2021, 14:56
    #40046714
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
ATM-TURBO 2,

Что касаеЦЦа вызова функций с соглашениями CDecl,
Вы же сами публиковали простое решение, основанное на DispCallFunc(). Какие у него такие минусы, которыми нельзя в 99% случаев пренебречь, имея ввиду плюсы?

Я понимаю и уважаю Ваш спортивный интерес, но в Вашем сообщении содержиЦЦа намёк на единственное правильное решение (IMHO, конечно; Вы же будете отрицать), который могут принять за чистую монету. И, с учётом исчезающе малой аудитории, интересующейся VB5/6, Вы бОльшую аудиторию VBA-шников им (таким решением) не отсекли?
...
Рейтинг: 0 / 0
18.02.2021, 15:07
    #40046728
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
ЦЦа
Что касаеЦЦа вызова функций с соглашениями CDecl,
Вы же сами публиковали простое решение, основанное на DispCallFunc(). Какие у него такие минусы, которыми нельзя в 99% случаев пренебречь, имея ввиду плюсы?


DispCallFunc - это костыль. Плюс еще работает медленнее, чем нативный метод предложенный ATM-TURBO 2.
...
Рейтинг: 0 / 0
18.02.2021, 15:31
    #40046741
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
Eolt,

когда на накладные разходы по вызову DispCallFunc() не наплевать? При сценарии, когда функция вызываеЦЦа внутри нескольких уровней циклов, 10 6 + с -1 ? Редкий сценарий.

Так же наплевать и на необходимость написания функции-обёртки - всё равно, чтобы скрестить ужа (программу) с ежом (библиотекой), требуюЦЦа действия по подготовке аргументов, вызову, обработке результатов для дальнейшего использования. Хотите накладных расходов избежать - пишите монолитные "портянки" на одном (максимально низкоуровневом) языке, инлайнте все функции, разворачивайте циклы и т. п. (и вообще, ОО и структурное программирование, разбиение приложения на компоненты - зло :) )

Костыль, но что здесь меньший костыль?
...
Рейтинг: 0 / 0
18.02.2021, 16:13
    #40046766
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
ЦЦа
Eolt,

когда на накладные разходы по вызову DispCallFunc() не наплевать?


При любом значительном количестве вызовов функции. Например при таком:


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Option Explicit
Private Declare Sub qsort CDecl Lib "msvcrt" ( _
                         ByRef pFirst As Any, _
                         ByVal lNumber As Long, _
                         ByVal lSize As Long, _
                         ByVal pfnComparator As Long)
                         
Sub Main()
    Dim z() As Long
    Dim i As Long
    Dim s As String
    ReDim z(10)
    
    For i = 0 To UBound(z)
        z(i) = Int(Rnd * 1000)
    Next
    
    qsort z(0), UBound(z) + 1, LenB(z(0)), AddressOf Comparator
    
    For i = 0 To UBound(z)
        s = s & CStr(z(i)) & vbNewLine
    Next
    
    MsgBox s
End Sub

Private Function Comparator CDecl( _
                 ByRef a As Long, _
                 ByRef b As Long) As Long
    Comparator = a - b
End Function
...
Рейтинг: 0 / 0
18.02.2021, 17:50
    #40046809
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
Eolt,
ЦЦа
При сценарии, когда функция вызываеЦЦа внутри нескольких уровней циклов, 10 6 + с -1 ? Редкий сценарий.
Вы мои слова решили проиллюстрировать? Мило, спасибо.
...
Рейтинг: 0 / 0
19.02.2021, 00:22
    #40046942
ATM-TURBO 2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
ЦЦа
ATM-TURBO 2,

Что касаеЦЦа вызова функций с соглашениями CDecl,
Вы же сами публиковали простое решение, основанное на DispCallFunc(). Какие у него такие минусы, которыми нельзя в 99% случаев пренебречь, имея ввиду плюсы?

Я понимаю и уважаю Ваш спортивный интерес, но в Вашем сообщении содержиЦЦа намёк на единственное правильное решение (IMHO, конечно; Вы же будете отрицать), который могут принять за чистую монету. И, с учётом исчезающе малой аудитории, интересующейся VB5/6, Вы бОльшую аудиторию VBA-шников им (таким решением) не отсекли?

DispCallFunc имеет несколько недостатков. Самый очевидный - нужно писать обертку, также загружать вручную библиотеки, получать адреса функций, ну и скорость работы конечно на порядки ниже. Куда проще как сейчас просто объявлять как обычные API - открываются большие возможности в использовании почти любых C-библиотек. Второй момент связан с колбеками, через DispCallFunc их невозможно организовать. Аналогично теперь возможно писать плагины там где используются C-либы.
Для VBA я даже не смотрел, т.к. им не интересуюсь.
...
Рейтинг: 0 / 0
19.02.2021, 22:03
    #40047360
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
ЦЦа
ATM-TURBO 2,

Что касаеЦЦа вызова функций с соглашениями CDecl,
Вы же сами публиковали простое решение, основанное на DispCallFunc(). Какие у него такие минусы, которыми нельзя в 99% случаев пренебречь, имея ввиду плюсы?

Я понимаю и уважаю Ваш спортивный интерес, но в Вашем сообщении содержиЦЦа намёк на единственное правильное решение (IMHO, конечно; Вы же будете отрицать), который могут принять за чистую монету. И, с учётом исчезающе малой аудитории, интересующейся VB5/6, Вы бОльшую аудиторию VBA-шников им (таким решением) не отсекли?


Для VBAшников использовать подобные решения это стрелять себе в ногу. Одно неверное движение в макросе - и какой-нибудь эксель улетает в дальние края.
Хочется запретного в VBA? Без проблем, но штатными методами - через COM-переходник.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBCDeclFix - Add-in позволяющий работать с CDecl функциями / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]