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 *);
任何提示嗎?