Esta documentación está archivada y no tiene mantenimiento.

Cómo: Modificar System::String en una función nativa mediante PInvoke

Visual Studio 2005

Puede pasar una matriz de String a una función nativa y modificar la matriz en la función nativa mediante los servicios PInvoke con DllImportAttribute y MarshalAsAttribute.

Ejemplo

Compile la biblioteca nativa.

// string_in_native_function.cpp
// compile with: /LD
#include <stdio.h>
#include <windows.h>

extern "C" {
   __declspec(dllexport) int f(wchar_t* buff[]) {
      printf_s("in f: %S\n", buff[0]);
      fflush(stdin);
      fflush(stdout);
      buff[0] = L"changed";
      return wcslen(buff[0]);
   }
};

Compile el siguiente ensamblado que utiliza el archivo DLL nativo.

// string_in_native_function_2.cpp
// compile with: /clr
using namespace System;
using namespace System::Runtime::InteropServices;

[DllImport("string_in_native_function.dll", CharSet=CharSet::Unicode)]
int f([In][Out][MarshalAsAttribute(UnmanagedType::LPArray, 
                ArraySubType=UnmanagedType::LPWStr, SizeConst=2)] array<String ^> ^ str);

int main() {
   array<String ^> ^ myarr = gcnew array<String^>(2);
   myarr[0] = "one";
   myarr[1] = "two";
   f(myarr);   // call to imported native function.
   Console::WriteLine("in managed: {0}", myarr[0]);
}

Resultados

in f: one
in managed: changed

Vea también

Mostrar: