你好,@William Liu。欢迎来到 Microsoft 问答。
这种使用方式似乎并不主流。你可以尝试下面的方式来使用。
创建Class Library
创建一个名为ClassLibrary1的Class Library,在其下面创建一个名为StringGenerator的类,添加下面的代码。
public class StringGenerator
{
    [UnmanagedCallersOnly(EntryPoint = "GenerateString")]
    public static IntPtr GenerateString(int length)
    {
        string result = new string('a', length);
        return Marshal.StringToHGlobalAnsi(result);
    }
}
点击ClassLibrary1 ,在<PropertyGroup>中添加<PublishAot>true</PublishAot>。打开Terminal(View->Terminal),通过cd ClassLibrary1定位到ClassLibrary1项目中,运行下面的命令生成dll:
dotnet publish -r win-x64 -c Release
更详细的生成dll的方法你可以参考文档。
创建WPF Application
在MainWindow.xaml中按如下调整代码
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="7*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <TextBox x:Name="MyTextBox" Grid.Row="0" Width="400" Height="300" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap" ></TextBox>
        <Button Content="Click Me!" Width="200" Height="50"  Click="Button_Click" Grid.Row="1"></Button>
    </Grid>
在MainWindow.xaml.cs中按如下调整代码
public partial class MainWindow : Window
{
    [DllImport("ClassLibrary1.dll", EntryPoint = "GenerateString", CallingConvention = CallingConvention.StdCall)]
    public static extern IntPtr GenerateString(int length);
    public MainWindow()
    {
        InitializeComponent();
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            int length = 10000;
            IntPtr resultPtr = GenerateString(length);
            string result = Marshal.PtrToStringAnsi(resultPtr);
            MyTextBox.Text = "string length: " + result.Length + "\n" + "string: " + result;
            // 记得释放非托管内存
            Marshal.FreeHGlobal(resultPtr);
        }
        catch (Exception exception)
        {
            MessageBox.Show(exception.Message.ToString());
        }
    }
}
WPF项目引用dll
对WPF项目进行右键->Rebuild。
将...ClassLibrary1\bin\Release\net8.0\win-x64\publish处的ClassLibrary1.dll复制到...WpfApp1\bin\Debug\net8.0-windows。
配置启动方式为不构建直接运行。
以调试方式运行WPF项目
运行结果
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。