powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBCDeclFix - Add-in позволяющий работать с CDecl функциями
8 сообщений из 8, страница 1 из 1
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
    #40046306
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот 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
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
    #40046714
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ATM-TURBO 2,

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

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


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

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

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

Костыль, но что здесь меньший костыль?
...
Рейтинг: 0 / 0
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
    #40046766
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа
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
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
    #40046809
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
ЦЦа
При сценарии, когда функция вызываеЦЦа внутри нескольких уровней циклов, 10 6 + с -1 ? Редкий сценарий.
Вы мои слова решили проиллюстрировать? Мило, спасибо.
...
Рейтинг: 0 / 0
VBCDeclFix - Add-in позволяющий работать с CDecl функциями
    #40046942
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЦЦа
ATM-TURBO 2,

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

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

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

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

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


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


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