Попытка обновления до .NET Framework 4 - PullRequest
2 голосов
/ 11 июня 2011

Я пытаюсь перейти на MS .NET Framework 4, и у меня возникает ошибка с функцией dllimport (см. Ниже).Когда код достигает dllimport, программа просто завершается с кодом ошибки 0x80000003.Я попытался изменить его так, чтобы вход и выход были StringBuilder, и я также попытался установить кодировку, изменив кодировку (на Unicode или ANSI) и установив EntryPoint (PathGetArgsA или PathGetArgsW).Этот код отлично работает в версии 3.5, но не в версии 4.

    [DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern string PathGetArgs([In] string path);
    [DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern void PathRemoveArgs([In, Out] StringBuilder path);
    public static bool ExtractArguments(string cmdLine, out string filePath, out string fileArgs)
    {
        StringBuilder strCmdLine = new StringBuilder(cmdLine.ToLower().Trim());

        filePath = fileArgs = "";

        if (strCmdLine.Length <= 0)
            throw new ArgumentNullException("cmdLine");


        fileArgs = string.Copy(PathGetArgs(strCmdLine.ToString())); // Error occurs here

        PathRemoveArgs(strCmdLine);

        filePath = string.Copy(strCmdLine.ToString());

        if (!string.IsNullOrEmpty(filePath))
            if (Utils.FileExists(filePath))
                return true;

        return false;
    }

Спасибо!

1 Ответ

3 голосов
/ 11 июня 2011

Я не уверен, что родные библиотеки DLL возвращаются в PathGetArgs, однако, класс Marshal мог бы помочь.

[DllImport("Shlwapi.dll")]
public static extern IntPtr PathGetArgs([In] string path);

fileArgs = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(PathGetArgs(strCmdLine.ToString()));
...