You can pass an array of
Example
Compile the native library.
В | ![]() |
---|---|
// 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 the following assembly that consumes the native DLL.
В | ![]() |
---|---|
// string_in_native_function_2.cpp // compile with: /clr using namespace System; using namespace System::Runtime::InteropServices; [DllImport("string_in_native_function.dll", charset=utf-8::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]); } |
Output
В | |
---|---|
in f: one in managed: changed |