2017-02-11 18 views
0

Требование 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 *); 

Любые советы?

ответ

0

DLL Dependecy Walker показал, что mkl_rt.dll не использует никакие другие DLL, но я все равно собрал все библиотеки MKL в одном каталоге. При просмотре других DLL-файлов при вызове, например, cblas_drotg, появляется следующее:

libiomp5md.dll 
mkl_avx2.dll 
mkl_core.dll 
mkl_intel_thread.dll 
mkl_rt.dll