加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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方法).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读