如何在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实例化和使用它。你确认吗?