Я пытаюсь отправить строку BSTR, написанную в C DLL, в Excel.
Проблема:
Excel VBA получает BSTR из C DLL. Я вижу BSTR в промежуточном окне VBA и окне отладки.
Если я попытаюсь разместить эту строку в ячейке листа, значением в ячейке будет первая буква строки (S).
Кажется, что когда я пытаюсь выделить ячейку со значением BSTR, она использует указатель на начало строки. Я не знаю, как показать всю строку BSTR.
Код C:
BSTR _stdcall ReturnString(void)
{
return SysAllocString(L"String From DLL");
}
Код VBA:
Private Declare Function ReturnString Lib "C:\ex4dl.dll" () As String
Sub test_sub()
Dim result As String
result = ReturnString()
Range("B1").Value = result
Debug.Print result
End Sub
Следуя моему комментарию о том, что функция C работает нормально, если вызывается непосредственно из ячейки, а StrConv() не работает как полное исправление, ниже приведен код C для объединенных строк.
Код C:
BSTR _stdcall ReturnStringTwo(BSTR stringOne, BSTR stringTwo )
{
BSTR finalString;
int buffer_len = _snwprintf(0,0,L"The strings that was passed (%s) and (%s)", stringOne, stringTwo);
finalString = SysAllocStringLen(0, buffer_len);
_snwprintf(finalString,buffer_len,L"The strings that was passed (%s) and (%s)", stringOne, stringTwo);
return finalString;
}
Код VBA:
Private Declare Function ReturnStringTwo Lib "C:\ex4dl.dll" (ByVal stringOne As String, ByVal stringTwo As String) As String
Sub test_sub()
Dim iString As String
Dim iStringTwo As String
Dim one As String
Dim two As String
one = "One"
two = "Two"
iString = ReturnString()
iStringTwo = ReturnStringTwo(one, two)
Range("B1").Value = StrConv(iString, vbFromUnicode) ' Works ok with the C only string'
Range("B2").Value = StrConv(iStringTwo, vbFromUnicode) 'Does not work correctly. The cells value is: "The strings that was passed (?e) and (?o)"'
End Sub
Обе функции работают, если вызываются непосредственно из ячейки, но не при распределении по ячейке.значение из VBA.
[Excel 2010, 32 бита]