![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
文章平均质量分 67
spkettas
天道酬勤
展开
-
调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配...
VS10下调用dll,代码如下: // C++接口声明 void test(char *str); // 接口声明 [DllImport("datalib.dll", EntryPoint = "test")] public static extern void test(string str); // 调用 string str="Hello"; te...原创 2013-04-03 13:13:52 · 1078 阅读 · 0 评论 -
C#调用C/C++动态库 封送结构体,结构体数组
因为公司一直都是做C++开发的,因客户需要要提供C#版本接口,研究了一下C#,发现其强大简洁, 在跨语言调用方面封装的很彻底,提供了强大的API与之交互.这点比JNA方便多了. Java与C#都只能调用C格式导出动态库,因为C数据类型比较单一,容易映射. 两者都是在本地端提供一套与之映射的C#/java描述接口,通过底层处理这种映射关系达到调用的目的. 一. 结构体的传递 ...原创 2012-09-10 18:13:39 · 708 阅读 · 0 评论 -
C# 调用C/C++回调函数
C/C++内回调函数一般通过传递函数指针来实现,函数指针在C#中对应的就是委托. // 传入函数指针 typedef void (*FUNC)(int,char*); JNAAPI bool processCallback(int a,FUNC func); public delegate void CallbackDelegate(int a,string param...原创 2012-09-11 11:23:13 · 1871 阅读 · 0 评论 -
内部限制:结构太复杂或太大
C#在调用c/c++动态库时,有时传入一个超大结构体数组时,运行时会报错: "内部限制:结构太复杂或太大" // 结构体定义 [StructLayout(LayoutKind.Sequential,Pack=1)] public struct hdata_element_t { public byte Valid; public float Value; } ...原创 2012-09-25 16:30:37 · 1452 阅读 · 1 评论 -
1970年至今秒数转化为时间
当前系统时间,一般取自1970年以来秒数值(int),各种编程语言提供API处理方式不同,特汇总。 1.C/C++ time_t seconds; time(&seconds); 2.QT QDateTime dt = QDateTime::currentDateTime(); dt.toTime_t(); 3.C# C#没有直接提供获取1970年秒值...原创 2016-01-06 11:00:37 · 9839 阅读 · 0 评论 -
Log4Net 使用
Log4j是Java下强大的日志记录类库,各语言都有相应实现版本。C的log4c,C++的log4cxx,QT的log4QT,C#下的log4Net。不过还是Log4j和Log4Net比较常用。 一. 下载 从 http://logging.apache.org/log4net/download_log4net.cgi 下载最新版本 log4net-1.2.15-bin-newkey...原创 2016-01-06 12:49:35 · 103 阅读 · 0 评论 -
C# 开发windows服务
windows下无法像linux那样直接运行nohup等命令运行后台程序,只能调用相应api做成服务。服务可以在没有任何用户登录计算机的情况下运行。C# 建立windows 服务比较方便,直接派生 System.ServiceProcess.ServiceBase,但是只支持windows XP。 /// <summary> /// 1.建立windows服务类,派生...原创 2016-03-11 10:26:59 · 121 阅读 · 0 评论