taurusxin / ncmdump

转换网易云音乐 ncm 到 mp3 / flac. Convert Netease Cloud Music ncm files to mp3/flac files.
MIT License
1.04k stars 168 forks source link

是否可以支持dll #6

Closed sciencekiller closed 9 months ago

sciencekiller commented 9 months ago

你好,非常感谢你的软件,到目前为止,它表现得非常好。但是我有一个提议,也是因为我在写一个带有GUI的转换器,您是否能将软件编译成一个可以调用的dll,使我可以在C#代码中调用它?这应该并不困难,在我的看来,只需要修改一些编译参数,如果C++可以调用这个dll,C#应该也可以。如果你能帮我这个忙,我万分感谢。(请尽量不要修改类名和方法名)

sciencekiller commented 9 months ago

如果有任何问题,请提出来,我非常愿意解答,也再次感谢你的开源软件,如果我的软件完工,我也会遵照MIT开源,并附上你的储存库

taurusxin commented 9 months ago

你好,非常感谢你支持本开源软件,对于你的请求我也非常支持,我会在下一个版本中提供开源的接口。

taurusxin commented 9 months ago

实验性得编译了一版 dll,下载dll后放到和C#可执行文件同一个目录下(例如Debug目录)

下载 libncmdump.zip

首先建立C#项目,然后新建如下类

class NeteaseCrypt
{
    const string DLL_PATH = "libncmdump.dll";

    [DllImport(DLL_PATH)]
    private static extern IntPtr CreateNeteaseCrypt(string path);

    [DllImport(DLL_PATH)]
    private static extern int Dump(IntPtr NeteaseCrypt);

    [DllImport(DLL_PATH)]
    private static extern void FixMetadata(IntPtr NeteaseCrypt);

    [DllImport(DLL_PATH)]
    private static extern void DestroyNeteaseCrypt(IntPtr NeteaseCrypt);

    private IntPtr NeteaseCryptClass = IntPtr.Zero;

    /// <summary>
    /// 创建 NeteaseCrypt 类的实例。
    /// </summary>
    /// <param name="FileName">网易云音乐 ncm 加密文件路径</param>
    public NeteaseCrypt(string FileName)
    {
        NeteaseCryptClass = CreateNeteaseCrypt(FileName);
    }

    /// <summary>
    /// 启动转换过程。
    /// </summary>
    /// <returns>返回一个整数,指示转储过程的结果。如果成功,返回0;如果失败,返回1。</returns>
    public int Dump()
    {
        return Dump(NeteaseCryptClass);
    }

    /// <summary>
    /// 修复音乐文件元数据。
    /// </summary>
    public void FixMetadata()
    {
        FixMetadata(NeteaseCryptClass);
    }
}

然后在你想要调用的地方调用它

private void button1_Click(object sender, EventArgs e)
{
    NeteaseCrypt neteaseCrypt = new NeteaseCrypt("test.ncm");
    int result = neteaseCrypt.Dump();
    neteaseCrypt.FixMetadata();
}

请注意!由于实验性dll编译成64位,所以请务必将C#程序编译成64位才可以调用dll

右键 C#项目 - 属性,选择 生成,将 目标平台改为 x64

sciencekiller commented 9 months ago

好的,非常感谢您的帮助,我将采用这一个库文件开发,并附上您的储存库地址

sciencekiller commented 9 months ago

目前我将你的软件打包成了一个nuget包,并且标注了你的储存库,遵循MIT开源,但是我认为还是应该询问你的意见,如果您不愿意将您的软件发布到Nuget,我将马上删除。包地址NCMConverter

taurusxin commented 9 months ago

你好,感谢你发布到 nuget,我非常乐意将其发布。