powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сверхбыстрый CopyMemory от Agner Fog
7 сообщений из 7, страница 1 из 1
Сверхбыстрый CopyMemory от Agner Fog
    #38994398
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь заюзать библиотеку asmlib http://www.agner.org/optimize/ от гуру оптимизации Agner Fog. Смысл в том, что либа определяет тип процессора, и выполняет код с использованием SSE2-SSE4, в некоторых случая в 6 раз быстрее чем стандартные сишные функции, которые никаких новых инструкций процессора не используют.

Сначала линкую библиотеку libacof32.lib к пустому ActiveX DLL проекту или к самому экзешнику, без разницы.

Код: vbnet
1.
2.
[VBCompiler]
LinkSwitches= "libacof32.lib" /EXPORT:A_memcpy



Экспортируется функция A_memcpy:

Код: plaintext
1.
void * A_memcpy(void * dest, const void * src, size_t count);



В списке экспорта DLL/EXE файла она появляется.

Затемы вызываю ее.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Explicit
Private Declare Sub CopyMemory Lib "asmlibDll.dll" Alias "A_memcpy" (ByVal lpvDest As Long, ByVal lpvSource As Long, ByVal cbCopy As Long)
Private Sub Command_Click()
    Dim z As Long
    Dim b As Long
    z = 1234
    CopyMemory VarPtr(b), VarPtr(z), 4
    MsgBox b
End Sub



Код работает только в скомпилированном EXE, а при запуске из IDE - авторBad Dll calling convertion

Что vb нравится?
...
Рейтинг: 0 / 0
Сверхбыстрый CopyMemory от Agner Fog
    #38994400
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Соглашение вызова? Похоже что не StdCall.
...
Рейтинг: 0 / 0
Сверхбыстрый CopyMemory от Agner Fog
    #38994401
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока вот так извратился:

Прилинковал libacof32.lib к asmlibDll проекту, в DLL вызываю функцию из самого себя и экспортирую ее в проект через метод класса.
Работает и в отладке и в экзешнике. Только непонятно как это скажется на скорости вызова A_memcpy, думаю что не самым лучшим образом...


Код: vbnet
1.
2.
3.
4.
5.
Private Declare Sub CopyMemory Lib "asmlibDll.dll" Alias "A_memcpy" (ByVal lpvDest As Long, ByVal lpvSource As Long, ByVal cbCopy As Long)

Public Sub asmCopyMemory(lpvDest As Long, lpvSource As Long, ByVal cbCopy As Long)
    CopyMemory lpvDest, lpvSource, cbCopy
End Sub
...
Рейтинг: 0 / 0
Сверхбыстрый CopyMemory от Agner Fog
    #38994404
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2Eolt,

Соглашение вызова? Похоже что не StdCall.

Cdecl в IDE и в скопилированном коде пишет что Bad Dll calling convertion.
...
Рейтинг: 0 / 0
Сверхбыстрый CopyMemory от Agner Fog
    #38994406
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

CDecl ты можешь заюзать если объявишь в TLB, но это будет работать только в скомпилированном виде, зато без всяких лишних нагрузок. Для теста можешь через DispCallFunc вызывать из IDE. Вот пример, только смени CC_STDCALL на CC_CDECL.
...
Рейтинг: 0 / 0
Сверхбыстрый CopyMemory от Agner Fog
    #38994407
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2Eolt,

CDecl ты можешь заюзать если объявишь в TLB, но это будет работать только в скомпилированном виде

А тот CDecl который, что в VB можно объявить, он что "неправильный"
...
Рейтинг: 0 / 0
Сверхбыстрый CopyMemory от Agner Fog
    #38994408
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Нет, он не будет работать. Если ты скомпилируешь приложение с таким CDecl'ом он тупо вставит ошибку в код даже не вызывая функции.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сверхбыстрый CopyMemory от Agner Fog
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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