feat: library example
This commit is contained in:
parent
37acbf07a7
commit
53b0d99431
|
@ -78,3 +78,5 @@ cmake --build build -j 8 --config Release
|
||||||
# Windows MinGW / Linux / macOS
|
# Windows MinGW / Linux / macOS
|
||||||
cmake --build build -j 8
|
cmake --build build -j 8
|
||||||
```
|
```
|
||||||
|
|
||||||
|
你可以在 `build` 文件夹下找到编译好的二进制文件,以及一个可供其它项目使用的动态库(Windows Only),使用方法见仓库的 `example` 文件夹
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace libncmdump_demo_cli
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// NeteaseCrypt C# Wrapper
|
||||||
|
/// </summary>
|
||||||
|
class NeteaseCrypt
|
||||||
|
{
|
||||||
|
const string DLL_PATH = "libncmdump.dll";
|
||||||
|
|
||||||
|
[DllImport(DLL_PATH, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
private static extern IntPtr CreateNeteaseCrypt(IntPtr path);
|
||||||
|
|
||||||
|
[DllImport(DLL_PATH, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
private static extern int Dump(IntPtr NeteaseCrypt);
|
||||||
|
|
||||||
|
[DllImport(DLL_PATH, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
private static extern void FixMetadata(IntPtr NeteaseCrypt);
|
||||||
|
|
||||||
|
[DllImport(DLL_PATH, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
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(Marshal.StringToHGlobalAnsi(FileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 启动转换过程。
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>返回一个整数,指示转储过程的结果。如果成功,返回0;如果失败,返回1。</returns>
|
||||||
|
public int Dump()
|
||||||
|
{
|
||||||
|
return Dump(NeteaseCryptClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 修复音乐文件元数据。
|
||||||
|
/// </summary>
|
||||||
|
public void FixMetadata()
|
||||||
|
{
|
||||||
|
FixMetadata(NeteaseCryptClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 销毁 NeteaseCrypt 类的实例。
|
||||||
|
/// </summary>
|
||||||
|
public void Destroy()
|
||||||
|
{
|
||||||
|
DestroyNeteaseCrypt(NeteaseCryptClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace libncmdump_demo_cli
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
// 文件名
|
||||||
|
string filePath = "test.ncm";
|
||||||
|
|
||||||
|
// 创建 NeteaseCrypt 类的实例
|
||||||
|
NeteaseCrypt neteaseCrypt = new NeteaseCrypt(filePath);
|
||||||
|
|
||||||
|
// 启动转换过程
|
||||||
|
int result = neteaseCrypt.Dump();
|
||||||
|
|
||||||
|
// 修复元数据
|
||||||
|
neteaseCrypt.FixMetadata();
|
||||||
|
|
||||||
|
// [务必]销毁 NeteaseCrypt 类的实例
|
||||||
|
neteaseCrypt.Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue