VBA에서 호출 될 때 C++ DLL을 만들었습니다. SAFEARRAY *가 반환됩니다.String의 변형 배열에 대체 공백이 포함되어 있습니다.
내 VBA 기능 :
Declare Function GetData_V Lib "xyz.dll" (ByVal path As String, ByVal id As String, ByRef inputArr() As String, ByRef output() As String) As Variant()
내 C++ 구현 :
SafeArrayLock(*outputArray);
for (LONG i = 0; i < countElements; i++)
{
CComBSTR bstr = CComBSTR(outputCustom[i]);
SafeArrayPutElement(*outputArray, &i, bstr);
}
SafeArrayUnlock(*outputArray);
delete [] outputCustom;
return *outputArray;
나는 그것이 같은 문자열을 보여줍니다 출력을 검사 할 때 outputCustom은 VBA에서
outputCustom = new char*[nCount+1];
으로 정의된다 :
1 0 . 9 4 4 9 d 0
2 . 8 3 4 6 d 0
0 . 0 1 1 8 d 0
0 . 6 2 9 9 d 0
0 . 6 2 9 9 d 0
0 . 6 2 9 9 d 0
2 5 . 0 d 0
0 . 0 7 6 4 d 0
1 0 . 9 4 4 9 d 0
2 . 8 3 4 6 d 0
0 . 0 1 1 8 d 0
코드를 디버깅하여 C++에서 * outputArray의 값을 확인했지만 모든 것이 잘되었지만 VBA에서 배열을 검사하면 각 문자열의 각 문자 사이에 여분의 공백이 생겼습니다.
다음은 동일한 일을하는 사람이 발견 한 블로그입니다. 결론은 'AA'의 답변에 따른 것입니다. https://www.daniweb.com/programming/software-development/threads/271964/returning-array-of -string-from-c-dll-to-vba – UKMonkey