none
silverlight项目调用本地c++编写的dll文件 RRS feed

  • 问题

  • 新建一个silverlight 5 beta 项目,勾选在浏览器内运行是需要提升的信任

    将测试dll放到 C:\Windows\System32 目录

    MainPage中放置一个按钮,用来测试dll文件是否调用成功,代码如下:

     public partial class MainPage : UserControl
        {
            [DllImport("DllTest.dll", EntryPoint = "add", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = false)]
            public static extern int add(int x, int y);
    
            public MainPage()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                var Val = add(3, 5);
                MessageBox.Show(Val.ToString());
            }
        }

    可以得到期望的结果

    如果我在sl项目的属性中勾选(允许在浏览器外运行应用程序),然后取消,然后再保存,运行程序,点击按钮后,会报错:

    安全透明方法“SlDllTestNew.MainPage.Button_Click(System.Object, System.Windows.RoutedEventArgs)”尝试通过方法“SlDllTestNew.MainPage.add(Int32, Int32)”调用本机代码失败。方法必须是安全关键或安全可靠关键,才能调用本机代码。

    期待大神出现帮我解答!!!谢谢

    2014年3月31日 13:20

答案

  • Hi SZKK,

    “如果我在sl项目的属性中勾选(允许在浏览器外运行应用程序),然后取消,然后再保存,运行程序,点击按钮后,会报错”

    因为你的DLL是放在项目外部,你这里是C:\Windows\System32,所以想要引用的话必须要提升信任,但是你现在取消了,必然会报错。。。

    不知道我是否正确理解你的意思了,如果有什么不对,请告知于我,谢谢。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年4月2日 6:22