WinRT应用程序调用win32 c ++ dll发送参数

问题描述 投票:0回答:3

嘿,这是第一次使用C ++,所以请客气:)

我制作了一个WinRT应用程序,由于使用了某种类型的“沙盒”,因此它无法对那些应用程序进行访问(我想访问的内容-我的桌面应用程序。)>

因此到处阅读,我发现如果您制作一个C ++ Dll并从WinRT应用程序中调用它,那将允许您在“沙箱”之外进行调用。但是那里有一个小问题。

我当前遇到错误:

错误CS1660无法将lambda表达式转换为类型'string',因为它不是委托类型。

在此使用此代码:

void Header_Click(object sender, RoutedEventArgs e)
{
    DisplayFromDLL("tester", s =>
    {
        // response is returned in s - do what you want with it
    });
}

DisplayFromDLL是它从中抛出该错误的位置。更多的是“ s”。

因此,我必须使用如下方式调用dll的C#代码:

public sealed partial class GroupedItemsPage : Page
{
    [DllImport("Win32Project1.dll", EntryPoint = "DisplayFromDLL", CallingConvention = CallingConvention.StdCall)]
    public static extern void DisplayFromDLL(string name, String response);

    void Header_Click(object sender, RoutedEventArgs e)
    {
        DisplayFromDLL("tester", s =>
        {
            // response is returned in s
        });
    }

和C ++ dll代码:

extern "C"
{
    __declspec(dllexport) void DisplayFromDLL(const char name)
    {
        MessageBox("name is: " + name, "Msg title", MB_OK | MB_ICONQUESTION);
    }
}

因此,如果有什么帮助,可以看出是哪一方引起了该错误以及如何解决该错误。

嘿,这是第一次使用C ++,所以请客气:)我制作了一个WinRT应用程序,由于存在某种类型的“沙盒”,因此它对那些应用程序起作用,所以我无法访问该类之外的任何内容(例如。 ..

c# c++ dll windows-runtime dllimport
3个回答
1
投票

您的定义(在DLL中),声明(在c#端)和实际调用根本不匹配。


0
投票

嗯,我认为我在这里找到了实现目标的好方法。


0
投票
如果UWP沙箱的局限性妨碍了您的设计,请

开发桌面应用程序

© www.soinside.com 2019 - 2024. All rights reserved.