Использование CoTaskMemAlloc?

Это зависит от версии вашего TFS. Тем не менее, если вы пытаетесь подключиться к TFS2015 или TFS2017, это подойдет:

using Microsoft.TeamFoundation.Client;
using Microsoft.VisualStudio.Services.Common;
using System;
using System.Net;   

namespace TFSConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            NetworkCredential networkCredentials = new NetworkCredential(@"Domain\Account", @"Password");
            Microsoft.VisualStudio.Services.Common.WindowsCredential windowsCredentials = new Microsoft.VisualStudio.Services.Common.WindowsCredential(networkCredentials);
            VssCredentials basicCredentials = new VssCredentials(windowsCredentials);
            TfsTeamProjectCollection tfsColl = new TfsTeamProjectCollection(
                new Uri("http://XXX:8080/tfs/DefaultCollection"),
                basicCredentials);

            tfsColl.Authenticate(); // make sure it is authenticate
        }
    }
}

Я не могу не подчеркнуть, что с учетными данными все в порядке! Эта ошибка встречалась и у меня пару раз.

Есть и другое решение, если вышеперечисленное не работает.

  1. Закройте Visual Studio и перейдите в Панель управления
  2. Учетные записи пользователей -> Управление учетными данными (в левом столбце)
  3. Выберите «Учетные данные Windows»
  4. [114 ] Прокрутите вниз до раздела «Общие учетные данные» и найдите подключение к TFS-серверу.
  5. Разверните раскрывающийся список и нажмите «Изменить»
  6. . Введите свой сетевой пароль
  7. Перезапустите Visual Studio и повторите код
14
задан mmcdole 26 December 2008 в 05:59
поделиться

3 ответа

Черт возьми я должен был думать некоторое время для этого - я сделал изрядное количество небольшого COM, программирующего с ATL, и редко должен был использовать его.

Существует одна ситуация, хотя это приходит на ум: расширения Windows Shell. Если Вы имеете дело с рядом объектов файловой системы, что Вам, возможно, придется иметь дело с PIDLs (указатель на идентификационный список). Это причудливые небольшие абстракции объекта файловой системы, и они должны быть явно выделены/освобождены с помощью COM-осведомленного средства выделения такой как CoTaskMemAlloc. Существует также альтернатива, IMalloc указатель на интерфейс, полученный из SHGetMalloc (удержанный от использования) или CoGetMalloc - это - просто уровень абстракции для использования, так, чтобы код не был связан с определенным средством выделения памяти и мог использовать, любой адаптирует тот.

Точка использования CoTaskMemAlloc или IMalloc вместо malloc() это, выделение памяти / освобождение должно быть чем-то, что "COM-знает" так, чтобы его выделение и освобождение последовательно выполнялись во времени выполнения, даже если выделение и освобождение сделаны абсолютно несвязанным кодом (например, Windows выделяет память, передачи это к Вашему коду C++, который позже освобождает, или Ваш код C++ выделяет, передачи это к чужому коду VB, который позже освобождает). Ни один malloc() ни new способны к взаимодействию с "кучей" системы во время выполнения, таким образом, Вы не можете использовать их для выделения памяти, чтобы передать другим COM-объектам, или получить память от других COM-объектов и освободить.

12
ответ дан 1 December 2019 в 06:48
поделиться

CoTaskMemAlloc - то же как malloc за исключением того, что прежний используется для выделения памяти, которая используется через границы процесса.

т.е. если мы имеем два процесса, process1 и process2, предполагаем, что process1 является сервером COM, и process2 является COM-клиент, который использует интерфейсы, выставленные process1. Если process1 должен отправить некоторые данные, то он может выделить использование памяти CoTaskMemAlloc для выделения памяти и копирует данные. К той ячейке памяти может получить доступ process2.

Библиотека COM автоматически делает маршалинг и немаршалинг.

2
ответ дан 1 December 2019 в 06:48
поделиться

Эта статья MSDN сравнивает несколько различных средств выделения, выставленных Win32, включая CoTaskMemAlloc. Это главным образом используется в COM, программирующем - наиболее конкретно, когда реализация сервера COM должна выделить память для возврата назад к клиенту. Если Вы не пишете сервер COM, то Вы, вероятно, не должны использовать его.

(Однако при вызове кода, который выделяет использование памяти CoTaskMemAlloc и возвращает его назад Вам, необходимо будет освободить возвращенное использование выделения (выделений) CoTaskMemFree.)

7
ответ дан 1 December 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: