如何将字符串复制到参数的managed->非托管调用?

时间:2015-11-09 12:26:17

标签: c# unmanaged native-code

我有非托管dll:

char *DuplicateForCLR(const char *pString)
{
    char *pRetVal;
    auto Length = MyStrlen(pString);

    pRetVal = (char*)CoTaskMemAlloc((Length + 1) * sizeof(char));

    MyStrcpy(pRetVal, pString);

    return pRetVal;
}
extern "C"  __declspec(dllexport) int InitConfigAndEnvironment(int argc, char *argv[], char **ppReadFile)
{
   auto ret = ConfigInit(argc, argv);
   if (ret != 0)
   {
       *ppReadFile = DuplicateForCLR(ConfigGetReadFile());
       ret = 1;
   }
   return ret;
}

并在托管中:

[DllImport(DllName, CallingConvention = DllCallingConvention)]
public static extern int InitConfigAndEnvironment(int argc, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)]string[] argv, out string readConfigFile);

然而,在添加此调用后,我开始遇到奇怪的问题(可能已损坏的内存),我不知道这是否是100%正确的方法。

0 个答案:

没有答案