Skip to content

编译注册 C# 代码

compileCsharp 接口用于将 C# 源代码编译,并返回一个唯一的函数 ID(funid),供后续调用使用。

接口说明

接口类型

compileCsharp

参数

参数名类型必填说明
codestringC# 源代码字符串
refsstring[]托管 DLL 文件路径数组

返回值

返回一个字符串类型的 funid(函数 ID),用于后续通过 executeCsharp 接口调用该函数。

基本使用

简单示例

javascript
// 编译并注册一个简单的 C# 函数
const funid = await apiInvoke("compileCsharp", {
    code: `
        using System;
        using System.Collections.Generic;
        using System.Runtime.InteropServices;
        using System.Threading.Tasks;
        using OpenCvSharp;
        
        //加载非托管DLL
        public static class User32
        {
            [DllImport("user32.dll")]
            public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
        }

        public class Startup
        {
            public async Task<object> Invoke(dynamic args)
            {
                //获取参数
                byte[] screenShotImage = (byte[])args.screenshot;
                int inta = (int)args.inta;
                float floatb = (float)args.floatb;

                User32.MessageBox(IntPtr.Zero, "OpenCvSharp和user32都已加载", "提示", 0);
                //......

                return inta + floatb;
            }
        }
    `,
    //这里只允许托管dll文件
    refs: ["D:\\opencv\\OpenCvSharp.dll"]
})

console.log('funid', funid)
// 输出: 函数 ID: abc123def456...

注意事项

⚠️ 重要限制

  1. 托管 DLL 限制

    • refs 参数只能引用托管 DLL(.NET 程序集)
    • 非托管 DLL,需使用 DllImport
  2. 类名和方法名固定

    • 类名必须是 Startup
    • 方法名必须是 Invoke
    • 签名必须是 public async Task<object> Invoke(dynamic args)
  3. 命名空间引用

    • 必须显式引用需要的命名空间(如 using System;
    • 不会自动引用所有命名空间

编译错误处理

如果编译失败,接口会抛出异常。

下一步

编译完成后,使用返回的 funid 调用函数:

查看 执行 C# 函数 了解如何调用已编译的函数。

商务合作:try.catch@foxmail.com