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来做到这一点。
这在很大程度上取决于您的场景的细节。调用一个完整的。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