2017-02-11 71 views
0

dll在VBA中正常工作所需的stdcall要求僅適用於32位dll。在64位dll中,我認爲只有一個調用約定,所以理論上我應該能夠從mkl_rt.dll中聲明函數。在VBA Excel中聲明英特爾MKL dll的BLAS功能

而事實上,與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) 

但無論怎樣我嘗試相同的不適用於64位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時其他dll加載的內容時,顯示如下:

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