我有一个 C++ DLL;我试图在 VBA 中调用一个导出函数,该函数将返回一个数组。为了避免将 SAFEARRAY 作为返回类型处理,我选择通过引用将数组传递给函数,并让函数修改该数组的值。但是 VBA 实现不会返回修改后的值,即使我ByRef
用来传递数组。
标题:
namespace myProject
{
class FileOperator
{
public:
static __declspec(dllexport) void __stdcall testArray(long* docArray);
};
}
执行:
#include "stdafx.h"
#include "myProject.h"
using namespace std;
namespace myProject
{
void __stdcall FileOperator::testArray(long* docArray)
{
docArray[0]=303;
docArray[1]=909;
}
}
控制台应用测试:
#include "stdafx.h"
#include <iostream>
#include "../myProject/myProject.h"
using namespace std;
int main()
{
long docArray[2]={0};
myProject::FileOperator::testArray(docArray);
cout << docArray[0] << "\n" << docArray[1];
}
VBA测试:
Private Declare Sub testArray Lib "C:\pathToDLL\myProject.dll" _
Alias "?testArray@FileOperator@myProject@@SGXPAJ@Z" _
(ByRef docArray() As Long)
Public Sub test()
Dim docArray(1) As Long
docArray(0) = 0
docArray(1) = 0
testArray docArray
For Each x In docArray
Debug.Print x
Next
End Sub
C++ 控制台应用程序输出:
303
909
VBA 应用程序输出:
0
0
testArray()
为什么函数退出后不保存数组更改?ByRef
关键字不应该使这成为可能吗?