Closed sciencekiller closed 9 months ago
如果有任何问题,请提出来,我非常愿意解答,也再次感谢你的开源软件,如果我的软件完工,我也会遵照MIT开源,并附上你的储存库
你好,非常感谢你支持本开源软件,对于你的请求我也非常支持,我会在下一个版本中提供开源的接口。
实验性得编译了一版 dll,下载dll后放到和C#可执行文件同一个目录下(例如Debug目录)
首先建立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
好的,非常感谢您的帮助,我将采用这一个库文件开发,并附上您的储存库地址
目前我将你的软件打包成了一个nuget包,并且标注了你的储存库,遵循MIT开源,但是我认为还是应该询问你的意见,如果您不愿意将您的软件发布到Nuget,我将马上删除。包地址NCMConverter
你好,感谢你发布到 nuget,我非常乐意将其发布。
你好,非常感谢你的软件,到目前为止,它表现得非常好。但是我有一个提议,也是因为我在写一个带有GUI的转换器,您是否能将软件编译成一个可以调用的dll,使我可以在C#代码中调用它?这应该并不困难,在我的看来,只需要修改一些编译参数,如果C++可以调用这个dll,C#应该也可以。如果你能帮我这个忙,我万分感谢。(请尽量不要修改类名和方法名)