Silverlight 5和dll

时间:2011-09-14 08:12:22

标签: c# .net silverlight dllimport silverlight-5.0

Silverlight 5为我们提供了一个很棒的功能。这是P / Invoke(平台调用)。该功能可以从系统DLL中调用函数。但我需要使用未为Silverlight编译的“.NET DLL”。我怎么能通过P / Invoke或其他方式做到这一点? 附:我的应用程序是“受信任的”“浏览器内”应用程序。

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

3 个答案:

答案 0 :(得分:3)

这在很大程度上取决于您的方案的具体情况。调用完整.NET组件的唯一方法是通过COM。如果.NET组件公开了COM所需的API,那么您可以使用AutomationFactory来获取它(您也可以在SL4中执行此操作)。

如果它没有COM可访问的API,那么也许您可以安装自己的dll,为原始dll周围的COM可访问类创建一个集合,或者如果有问题的dll是您自己的代码,您可以将其修改为COM无障碍。当然,这假设您可以在客户端计算机上安装某些东西,如果没有,那么您就会受到阻碍。

答案 1 :(得分:1)

我没有关注你。

你到底有哪些问题?

如果您想使用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);
        }
    }
}

如果你有一个不是SL项目或SL控件库的.NET DLL(程序集),你可以尝试PInvoke它,但通常你通过WCF或其他渠道公开它的服务。我知道你在浏览器之外可能想要断开工作......你能告诉我们更多关于你的具体需求吗?

请参阅此文章btw:How to use PInvoke in Silverlight 5

答案 2 :(得分:1)

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

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

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

Anders @ Cureos