如何在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
答案 0 :(得分:0)
您的VBA代码需要一个名为DllVBA
的函数,该函数在您的dll中不存在(无声明/实现/导出)。您刚刚导出了名为DllVBA
的本机类。
当您在VBA中写下以下声明时要小心:
Dim instance As Object
这意味着您声明了COM实例引用,但没有声明本机类实例引用! VBA大量依赖COM对象。
根据我的理解,您似乎打算构建一个用QT5(C ++)编写的COM组件并实现并通过VBA使用它。你确认了吗?