我有非托管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%正确的方法。