如何在Qt 5中创建DLL以在VBA中使用它?我有简单的课程:

dllvba.h

#ifndef DLLVBA_H
#define DLLVBA_H

#include "dllvba_global.h"

class DLLVBASHARED_EXPORT DllVBA
{

public:
    DllVBA();
    int qsum();
};

#endif // DLLVBA_H


dllvba_global.h

#ifndef DLLVBA_GLOBAL_H
#define DLLVBA_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(DLLVBA_LIBRARY)
#  define DLLVBASHARED_EXPORT Q_DECL_EXPORT
#else
#  define DLLVBASHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // DLLVBA_GLOBAL_H


dllvba.cpp

#include "dllvba.h"

DllVBA::DllVBA()
{
}

int DllVBA::qsum()
{
    return 2;
}


在VBA中,我使用代码:

Declare Function DllVBA Lib "C:\QTProject\DllVBA\build-DllVBA-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug\DllVBA.dll" ()  As Object

Sub test()

  Dim instance As Object

  Set instance = DllVBA()
  Debug.Print instance.qsum

End Sub


结果是错误:


  运行时错误“ 453”:
  
  在C:\ QTProject \ DllVBA \ build-DllVBA-Desktop_Qt_5_7_0_MinGW_32bit-Deb中找不到DLL条目DllVBA ...

最佳答案

您的VBA代码需要一个名为DllVBA的函数,该函数在您的dll中不存在(无声明/实现/导出)。您刚刚导出了一个名为DllVBA的本机类。

当您在VBA中编写以下语句时,请当心:

Dim instance As Object


这意味着您声明一个COM实例引用,但未声明本机类实例引用!
VBA很大程度上依赖于COM对象。

以我的理解,您似乎打算构建一个用QT5(C ++)编写的COM组件,并通过VBA实例化和使用它。你确认吗?

09-19 16:35