Silverlight 5 и длл - PullRequest
       28

Silverlight 5 и длл

3 голосов
/ 14 сентября 2011

Silverlight 5 дает нам отличную функцию. Это P / Invoke (Платформа Invoke). Эта функция позволяет вызывать функцию из системных библиотек DLL. Но мне нужно использовать «.NET DLL», которая не была скомпилирована для Silverlight. Как я могу сделать это через P / Invoke или другим способом? Постскриптум Мое приложение является «доверенным» «приложением в браузере».

Обновление: У меня есть специальная библиотека для взаимодействия с кнопкой микрофона. Я использую его в своем .NET-приложении как обычную «.NET DLL» (т.е. я добавляю его для ссылки и использую классы из него). Когда я узнал о P / Invoke, я решил попробовать использовать его в приложении Silverlight, но я не понял, как это сделать через P / Invoke.

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

Это очень сильно зависит от специфики вашего сценария. Единственный способ вызвать полноценный компонент .NET - через COM. Если компонент .NET предоставляет API, который вам необходим для COM, тогда вы можете использовать AutomationFactory для этого (вы можете сделать это и в SL4).

Если у него нет COM-доступного API, то, возможно, вы можете установить свою собственную dll, которая создает набор для COM-доступных классов вокруг исходной dll, или, если dll является вашим собственным кодом, вы можете изменить его на COM доступны. Конечно, это предполагает, что вы можете установить что-то на клиентском компьютере, если нет, то вы заблокированы.

1 голос
/ 16 сентября 2011

Я думаю, что столкнулся с такой же проблемой, как ваша. Я решил это, связав свою собственную DLL как ресурс в приложении Silverlight XAP, и при запуске приложения я позволил приложению скопировать DLL в локальный каталог на моем компьютере и добавить локальный каталог в системный путь, пока приложение работает.

Я более подробно описал свое решение в этой записи блога: http://cureos.blogspot.com/2011/09/pinvoke-bundling-native-dlls-in.html

Надеюсь, это решит вашу проблему. Удачи!

Андерс @ Cureos

1 голос
/ 14 сентября 2011

Я не следую за тобой.

Какая проблема у вас точно?

Если вы хотите использовать PInvoke для вызова Windows API, вы можете сделать что-то вроде этого, например:

using System;
using System.Runtime.InteropServices;


namespace MySilverlightApplication
{
    public class PlatformInvokeTest
    {
        [DllImport("kernel32.dll")]
        public static extern bool Beep(int frequency, int duration);


        public static void PlaySound(int frequency, int duration)
        {
          Beep(frequency, duration);
        }
    }
}

Если у вас есть .NET DLL (сборка), которая не является проектом SL или библиотекой управления SL, вы можете попытаться вызвать PInvoke, но обычно вы предоставляете ее службы через WCF или другой канал. Я понимаю, что, находясь вне браузера, вы можете работать автономно ... Не могли бы вы рассказать нам больше о ваших конкретных потребностях?

См. Эту статью здесь: Как использовать PInvoke в Silverlight 5

...