Arrays 如何从C/C++;dll到vba(Excel)

Arrays 如何从C/C++;dll到vba(Excel),arrays,string,excel,vba,dll,Arrays,String,Excel,Vba,Dll,如何将字符串数组从C/C++dll传递到vba(Excel) visualstudio中的动态链接库 未管理dll、ATL等 问候 Andy处理此问题的方法之一是编写DLL以返回Byte类型的SAFEARRAY作为函数结果(VB数组是OLE SafeArrays) 为此,您必须阅读SafeArray API和结构。我自己也不知道,但您需要的主要内容是SAFEARRAYBOUND结构和SafeArrayCreate API。API返回给您的内容,您将返回到VBA。很多年前,微软写了一份白皮书,详细

如何将字符串数组从C/C++dll传递到vba(Excel)

visualstudio中的动态链接库

未管理dll、ATL等

问候
Andy

处理此问题的方法之一是编写DLL以返回Byte类型的SAFEARRAY作为函数结果(VB数组是OLE SafeArrays)


为此,您必须阅读SafeArray API和结构。我自己也不知道,但您需要的主要内容是SAFEARRAYBOUND结构和SafeArrayCreate API。API返回给您的内容,您将返回到VBA。很多年前,微软写了一份白皮书,详细介绍了编写DLL以与VB5/VB6一起使用的一些最佳实践,当然也适用于VBA。经许可,可在以下位置以原始Word格式转载:

Microsoft:为VB5开发DLL


有关此任务的帮助,请参阅第8节(“传递和返回数组”)。有一个例子是专门为演示字符串数组的传递和返回而编写的。

我发现这是可行的:DECLSPEC SAFEARRAY*WINAPI fun(){SAFEARRAY*psa;SAFEARRAYBOUND rgsabound[1];rgsabound[0]。lLbound=0;rgsabound[0]。cElements=5;psa=SafeArrayCreate(VT_BSTR,1,rgsabound);SafeArrayLock(psa);LONG idx=0;SafeArrayPutElement(psa,&idx,SysAllocString(L“la”);idx=1;SafeArrayPutElement(psa,&idx,SysAllocString(L“da”);SafeArrayUnlock(psa);return psa;}感谢您的帮助