Как мне преобразовать VBA long & HFFFFFFF0 в uint для использования в C#? - PullRequest
1 голос
/ 19 февраля 2020

Я видел несколько примеров, которые работают для меня. Поэтому я хотел задать новый вопрос. Я специально пытаюсь использовать метод AccessibleObjectFromWindow из olea cc .dll.

У меня есть версия функции, написанная кем-то другим, в Access VBA, которую я пытаюсь перенести на C#.

рассматриваемый код:

    public static bool GetReferenceToApplication(long hWndXL, out object oApplication)
{
    oApplication = null;
    long hWinDesk = (long)FindWindowEx(new IntPtr(hWndXL), new IntPtr(0), "XLDESK", string.Empty);
    long hWin7 = (long)FindWindowEx(new IntPtr(hWinDesk), new IntPtr(0), "EXCEL7", string.Empty);
    Guid guid = new Guid("00020400-0000-0000-C000-000000000046");
    object obj = null;

    if (AccessibleObjectFromWindow(new IntPtr(hWin7), Convert.ToUInt32("&HFFFFFFF0", 16), ref guid, ref obj) == RETURN_OK)
    {
        oApplication = obj;
        return true;
    }
    else return false;
}

Convert.ToUInt32 ("& HFFFFFFF0", 16) не работает. Я знаю, что я делаю что-то не так, я не знаю, что именно. В VBA я думаю, что амперсанд обозначает длинный. Но я еще не слишком знаком с такими вещами. Любая помощь будет оценена. Теперь я получаю исключение, независимо от того, каким образом я пытаюсь преобразовать это значение в uint.

1 Ответ

4 голосов
/ 19 февраля 2020

Просто удалите &H из строки. VBA использует это для обозначения «это шестнадцатеричное значение» , но оно не является частью допустимой шестнадцатеричной строки, которую C# может интерпретировать.

Convert.ToUInt32("FFFFFFF0", 16)
...