Vt中的Qt5 Dll,错误运行时错误453

时间:2017-01-23 18:40:53

标签: c++ excel-vba qt vba excel

如何在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

1 个答案:

答案 0 :(得分:0)

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

当您在VBA中写下以下声明时要小心:

Dim instance As Object

这意味着您声明了COM实例引用,但没有声明本机类实例引用! VBA大量依赖COM对象。

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