通常、VBAで動作するdllに必要なstdcallの要件は、32ビットのdllにのみ適用されます。 64ビットdllでは呼び出し規約が1つしかないと私は思うので、理論的には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)
しかし、どちらの方法I同じ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 *);
任意のヒント?