Silverlight 5 and dll

本文关键字:dll and Silverlight | 更新日期: 2023-09-27 18:08:26

Silverlight 5给了我们一个很棒的功能。这就是P/Invoke(平台调用)。该特性使得从系统DLL中调用函数成为可能。但我需要用"。. NET DLL",没有为Silverlight编译。我如何通过P/Invoke或其他方式做到这一点?注:我的应用程序是"受信任的"浏览器内"应用程序。

更新:我有一个特定的库与麦克风的按钮进行交互。我在我的。net应用程序中使用它作为常规的。. NET DLL"(即我将其添加到引用并使用其中的类)。当我知道P/Invoke时,我决定尝试在Silverlight应用程序中使用它,但我不明白如何通过P/Invoke来做到这一点。

Silverlight 5 and dll

这在很大程度上取决于您的场景的细节。调用一个完整的。net组件的唯一方法是通过COM。如果。net组件暴露了你需要COM的API,那么你可以使用AutomationFactory来获取它(你也可以在SL4中这样做)。

如果它没有COM可访问的API,那么也许你可以安装自己的dll,在原始dll周围创建一组COM可访问的类,或者如果有问题的dll是你自己的代码,你可以将其修改为COM可访问的。当然,这假定您能够在客户端机器上安装某些东西,否则您就会受到阻碍。

我想我也遇到过类似的问题。我通过在Silverlight应用程序XAP中捆绑我的本地DLL作为资源来解决这个问题,当启动应用程序时,我让应用程序将DLL复制到我计算机上的本地目录,并在应用程序运行时将本地目录添加到系统路径。

我在这篇博文中更广泛地描述了我的解决方案:http://cureos.blogspot.com/2011/09/pinvoke-bundling-native-dlls-in.html

我希望这能解决你的问题。好运!

Anders @ Cureos

我不明白。

你到底有什么问题?

如果你想使用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或其他渠道暴露它的服务。我理解在浏览器之外,您可能想要断开连接…你能告诉我们你的具体需求吗?

在这里顺便看看这篇文章:如何在Silverlight 5中使用PInvoke