Browsing the archives for the C tag

C#调用C++编译的DLL问题

写了个简单的dll尝试调用 testcpp.cpp: extern “C” __declspec(dllexport) int testadd(int i) { return i++; } c#: using System; using System.Runtime.InteropServices; public class MainClass { [DllImport("testcppdll.dll", EntryPoint = "testadd", CallingConvention = CallingConvention.StdCall)] public static extern int testadd(int x); static void Main() { Console.WriteLine(testadd(5)); } } 运行的时候出现“请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”错误 网上找了一堆都是说类型不匹配导致的问题,我可是把int long uint ulong Int16 Int32 Int64各种都试过排列组合。。。 当然这也是潜在可能的错误啦。 今天早上蛋疼地重新开了个程序用.net framework 2.0重新调用了一下,结果就pass了! [...]

0 Comments

小记一下久违的coding, 另附matlab与C#连接

最近写个仿真程序, 一开始纠结在是用delphi, C还是java. 经过小白的推荐还是用了C#, 写界面简单一些, 语法也比较熟悉, 不需要太大变动. 前几周基本上把系统设计的部分搞完了, 当然就只是最普通的两轮升压式. 然后就是苦逼的界面了..主要是这个需求不明确啊..下次一定得先问清楚. 这个程序需要系统设计, 部件设计, 系统仿真. 原本导师打算用matlab做的,但是matlab..好吧我是totally没用过matlab编程, 何况后面还要用数据库什么的, 从一开始就没有往那方面考虑. 结果现在搞出一个要用原来写好的matlab程序来做部件设计..我就confused了 上网搜了一下, c#调用matlab也不会太困难 首先随便写个m程序, 保存 然后在matlab里面输命令deploytool 新建一个project, 选择.net assembly 右边出一个小框框 添加类, 文件, 名字都随便输 编译! 在c#里面引用编译好的dll 再引用一个X:\Program Files\MATLAB\R2011b\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll 添加CsharpMatlabCompilerVer4.cs 添加代码 using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; 我的m文件是testadd, 类名是Cadd,于是乎 testadd.Cadd ca = new testadd.Cadd(); MWArray res; res = ca.add((MWArray)2, (MWArray)2); label1.Text = res.ToString(); [...]

0 Comments

读取浮点数的每一字节数据

想把float的二进制表示读出来 用指针是最快了啦~ int trans(int a, float s, barray buff[50]) { float *ps = &s; barray *p; int i; p = (barray *)ps; for (i = a; i < a+4; i++) { buff[i] = *(p+i-a); } return 0; } float receive(int a, barray buff[50]) { float ans; float *ps; ps = (float *)(buff+a); ans = *ps; [...]

1 Comment