Как получить возвращаемое значение из неуправляемого кода через COM Automation в Silverlight? - PullRequest
0 голосов
/ 19 января 2011

В настоящее время я пытаюсь вызвать некоторый неуправляемый код из приложения вне браузера Silverlight 4 с повышенными привилегиями.

Мой простой тестовый код не выполняется с ArgumentException.

try
{
    dynamic watch = AutomationFactory.CreateObject("WatchCOMLib.HighPerformanceWatch");                

    // Displays ...AutomationMetaObjectProvider
    MessageBox.Show(watch.ToString());  


    // Fails with ArgumentException: Could not convert an argument for the call to GetTimestamp
    ulong tsc;
    watch.GetTimestamp(out tsc);  

    MessageBox.Show(tsc.ToString());
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }

Я создал библиотеку COM с помощью мастера шаблонов Visual Studio 2010 ATL; метод выглядит как

STDMETHODIMP CHighPerformanceWatch::GetTimestamp(ULONGLONG* tsc)
{
    // ....
    *tsc = result; // result is unsigned __int64
    return S_OK;
}

Когда я просто передаю tsc в GetTimestamp без указания ключевого слова out, исключение не выдается, но tsc не изменяется. Теперь ... как я могу получить значение из неуправляемой библиотеки?

Теперь может отсутствовать много информации. Я создал несколько руководств Hello-World для создания этой библиотеки COM, но на самом деле я понятия не имею, что там происходит. знак равно Пожалуйста, попросите все, что вам нужно!

1 Ответ

2 голосов
/ 19 января 2011

Вы проверили, что определение IDL GetTimestamp имеет атрибут [out], связанный с параметром?

...