C#使用C库的提示
发布时间:2020-12-15 04:07:56 所属栏目:百科 来源:网络整理
导读:我有一个C的库,我想从C#使用. 从我从互联网上收集到的信息,one idea将它包装在一个C DLL里面,而DllImport就是这样的. 问题是我想要调用的函数有一个非常讨厌的参数集:包括对函数的引用(它将是一个.NET函数)和一些数组(一些写,一些读). int lmdif(int (*fcn)
我有一个C的库,我想从C#使用.
从我从互联网上收集到的信息,one idea将它包装在一个C DLL里面,而DllImport就是这样的. 问题是我想要调用的函数有一个非常讨厌的参数集:包括对函数的引用(它将是一个.NET函数)和一些数组(一些写,一些读). int lmdif(int (*fcn)(int,int,double*,int*),int m,int n,double* x,double ftol,double xtol,double gtol,int maxfev,double epsfcn,double factor) 给我一个这样的界面,我应该注意些什么? (也请解决方案) 你为什么不… – 在C#中重写?我开始了,但是它已经是从FORTRAN机器翻译过来的,我不太喜欢编码我不明白的东西. – 使用an existing .NET library?我正在尝试,但结果并不完全相同 – 在C中重新编译?我在想,但看起来很痛苦 解决方法
唯一的“讨厌”参数是函数指针.但幸运的是,.NET通过代理来处理好它们.
唯一的问题是调用约定.在C#中,它只发出一个类型(iirc stdcall),而C代码可能会期望cdecl.后一个问题可以通过(或使用Reflection.Emit)在IL级别处理. Here is some code,它通过Reflection.Emit(这是为了帮助了解什么psuedo属性需要放置在委托的Invoke方法). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |