Передача строки из C ++ / CLI в VBA

Хорошо, я немного схожу с ума здесь.
У меня есть это объявление C ++ / CLI:

extern "C" __declspec(dllexport) int __stdcall Command(const char* commandName, const char* arguments, char* %result, int %resultLength) {
System::String^ commandNameS = gcnew System::String(commandName);
System::String^ argumentsS = gcnew System::String(arguments);
System::String^ resultS = gcnew System::String(' ', 1000);
int x = MainFunc::Command(commandNameS, argumentsS, resultS);
resultLength = resultS->Length;

char* str2 = (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(resultS);

//result = str2;
return x;
}

имя_команды и аргументы правильно вводятся из VBA.

resultLength возвращается обратно в VBA.

Если я отлаживаю, кажется, что str2 содержит правильное значение (шестнадцатеричное значение, за которым следует правильная строка в отладчике)

Если я раскомментирую // результат = str2; линия, я получаю крах.
Повторные попытки отладки приводят меня к этой информации об ошибке:

* MSACCESS.EXE вызвал точку останова. произошло

ntdll.dll!_RtlReportCriticalFailure@12()    Unknown Symbols loaded.
oleaut32.dll!_SysFreeString@4() Unknown Symbols loaded.

Куча была повреждена
0xC0000374 *

Поэтому я подозреваю, что мне нужно что-то закрепить или удержать выделение строки перед ее передачей обратно в VBA.

Объявление VBA6 для Win32:

Private Declare Function Command Lib "External.Win32.dll" (ByVal CommandName As String, ByVal Argument As String, ByRef Result As String, ByRef ResultLength As Long) As Long

РЕДАКТИРОВАТЬ:
Использование * result = * str2; показывает результат, равный первому символу в str2, но, кажется, все еще приводит к пустой строке на стороне VBA. Нет аварии, хотя.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]