Мне нужно собрать массив строк String ^, чтобы вызвать неуправляемую функцию, которая ожидает массив BSTR.
В MSDN я нашел статью
Как: Marshal COMСтроки с использованием C ++ Interop
с этим примером кода:
// MarshalBSTR1.cpp
// compile with: /clr
#define WINVER 0x0502
#define _AFXDLL
#include <afxwin.h>
#include <iostream>
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
#pragma unmanaged
void NativeTakesAString(BSTR bstr) {
printf_s("%S", bstr);
}
#pragma managed
int main() {
String^ s = "test string";
IntPtr ip = Marshal::StringToBSTR(s);
BSTR bs = static_cast<BSTR>(ip.ToPointer());
pin_ptr<BSTR> b = &bs;
NativeTakesAString( bs );
Marshal::FreeBSTR(ip);
}
Итак, я создал новый массив BSTR и назвал Marshal :: StringToBSTR () для каждой строки массива,Затем я создал управляемый массив pin_ptr.
array<pin_ptr<BSTR> >^ gcDummyParameters = gcnew array<pin_ptr<BSTR> >(asParameters->Length);
, но получил ошибку:
Error 2 error C2691: 'cli::pin_ptr<Type>' : a managed array cannot have this element type
Я пытался также с собственным массивом:
pin_ptr<BSTR> dummyParameters[100000];
, нодаже в этом случае я получил ошибку:
Error 1 error C2728: 'cli::pin_ptr<Type>' : a native array cannot contain this managed type
Что еще я могу сделать?