2013-06-04 55 views
0

我想要做的是從託管C++調用託管C++函數:馬歇爾管理字符串數組爲char * []

int runConfig(int argc, char* argv[]) 

public: static bool CreateConfigurationFile(int parameters, array<String^>^ arguments) 

我的問題是我怎麼轉換管理字符串的託管數組到char *的非託管數組中?

回答

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); 
+0

感謝亞歷克斯似乎運作良好。 – Dustybin80