我想要做的是从托管C ++调用非托管C ++函数:
int runConfig(int argc, char* argv[])
public: static bool CreateConfigurationFile(int parameters, array<String^>^ arguments)
我的问题是如何将托管字符串的托管数组转换为非托管的char *数组?
答案 0 :(得分:1)
您可以使用以下内容:
using namespace System;
using namespace System::Runtime::InteropServices;
bool CreateConfigurationFile(int parameters, array<String^>^ arguments)
{
int length = arguments->Length;
char** argv = new char*[length];
for(int i = 0; i < length; ++i)
{
argv[i] = (char*)Marshal::StringToHGlobalAnsi(arguments[i]).ToPointer();
}
runConfig(length, argv);
for(int i = 0; i < length; ++i)
{
Marshal::FreeHGlobal(IntPtr(argv[i]));
}
delete[] argv;
return true;
}
请注意,未使用int parameters
,因为.NET数组具有Length
属性。
如果您想使用PInvoke调用runConfig
,请使用以下PInvoke声明:
int runConfig(int argc, IntPtr argv);