Требование stdcall, обычно требуемое для работы dll для работы в VBA, применяется только к 32-разрядным dll. Я считаю, что в 64-битных DLL существует только одна конвенция, поэтому теоретически я могу объявить функции из mkl_rt.dll.Объявление функций BLAS из DLL Intel MKL в VBA Excel
И в самом деле с 64-битными OpenBLAS (libopenbas.dll) Я могу сделать объявить призыв к FORtran функции BLAS (не cblas) и она отлично работает:
Public Declare PtrSafe Sub dgemm Lib "libopenblas.dll" (ByVal transa As String, _
ByVal transb As String, _
ByRef m As Long, _
ByRef n As Long, _
ByRef k As Long, _
ByRef alpha As Double, _
ByRef a As Double, _
ByRef lda As Long, _
ByRef b As Double, _
ByRef ldb As Long, _
ByRef beta As Double, _
ByRef c As Double, _
ByRef ldc As Long)
Но какой бы ни способ, которым я попробуйте то же самое не работает с 64bit mkl_rt.dll, или, по крайней мере, я не могу найти правильный способ объявить вызовы mkl_rt.dll. Excel просто тихо уходит, когда делается вызов.
В чем причина?
Заголовки MKL немного отличаются от OpenBLAS, не уверены, что это как-то связано с этим.
MKL:
void DGEMM(const char *transa, const char *transb, const MKL_INT *m, const MKL_INT *n, const MKL_INT *k, const double *alpha, const double *a, const MKL_INT *lda, const double *b, const MKL_INT *ldb, const double *beta, double *c, const MKL_INT *ldc);
OpenBLAS:
void BLASFUNC(dgemm)(char *, char *, blasint *, blasint *, blasint *, double *, double *, blasint *, double *, blasint *, double *, double *, blasint *);
Любые советы?