我创建了一个使用“Register for com interop”的C#Dll,我设法使用RegAsm注册它:
RegAsm.exe -tlb -codebase MathLib.dll
之后我收到了消息:
“程序集导出到'C:\ Test \ MathLib.tlb',类型库已成功注册”
我现在如何调用Dll中的方法?例如,它有一个公共功能:
int Add(int a, int b) { return a + b; }
添加2个数字并返回结果。如何从命令行调用它并查看操作结果?
非常感谢。
它是如何工作的?
创建一个新的类库或继续使用现有的类库。然后添加UnmanagedExports Nuget包。
这几乎是所有需要的设置。
现在你可以编写任何类型的静态方法,用[DllExport]装饰它并从本机代码中使用它。它的工作方式与DllImport类似,因此您可以使用MarshalAsAttribute自定义参数/结果的编组。
在编译期间,我的任务将修改IL以添加所需的导出。
一个很好的例子是以下几行:
class Test
{
[DllExport("Add", CallingConvention = CallingConvention.Cdecl)]
public static int Add(int a, int b)
{
return a + b;
}
}
如您所知,继续使用RegAsm注册您的lib。要将COM函数重新导入另一个项目,您应该将其作为本机方法进行传输,并使用[DLLImport]
属性在代码中声明它。
参考文献:
UnmanagedExports Nuget package
我希望在某种程度上有所帮助。