在C#中如何调用这段C++的非托管代码???

问题描述

C++代码如下:#defineDLLPROC__declspec(dllimport)DLLPROClong__stdcallRdMultiBit(intnSerialNo,intnStationNo,constchar*ucStartAddr,intnNum,unsignedcharucRefValue[]);C#中:[DllImport("ModbusLib.dll",EntryPoint="RdMultiWord",CharSet=CharSet.Auto)]publicstaticexternlongRdMultiWord(intnSerialNo,intnStationNo,char*ucStartAddr,intnNum,short[]sRefValue);中的char*有问题,请问在C#中应该怎么写了?

解决方案

解决方案二:
constchar*改为stringCharSet.Auto改为CharSet.Ansi
解决方案三:
引用1楼akirya的回复:

constchar*改为stringCharSet.Auto改为CharSet.Ansi

short[]sRefValue改为StringBuilder
解决方案四:
路过接分!
解决方案五:
C#中:staticvoidMain(string[]args){intserialNum=1,stationNum=1,registersNum=2;stringstartAdr="0X0000";StringBuilderpsValue=newStringBuilder[]{11,22};Console.WriteLine("ReadyforReadMultiRegisters~!");RdMultiWord(serialNum,stationNum,startAdr,registersNum,psValue);Console.WriteLine("AllReadSuccess~!");}psValue该怎么初始化呢?
解决方案六:
楼主写的C++代码声明的函数不是太好,最好不要用数组作形数,而是用一个指针参数加一个数组长度参数[DllImport("ModbusLib.dll",EntryPoint="RdMultiWord",CharSet=CharSet.Auto)]publicstaticexternintRdMultiWord(intnSerialNo,intnStationNo,[MarshalAs(UnmanagedType.LPStr)]stringucStartAddr,intnNum,[UnmanagedType.ByValArray,SizeConst=xxx]sbyte[]sRefValue);最后这个SizeCount=xxx是传入数组的长度
解决方案七:
另外,楼主的unsignedcharucRefValue[]这个参数传入的是个数组呢还是字符串,如果是字符串的话,最好是改为char*c++的long是32位的,C#的long是64位的C++的char是8位,C#的char/short是16位的
解决方案八:
ifastringisreturned,then:StringBuilderpsValue=newStringBuilder(256);ifanarrayofcharsreturned,then(C++char=C#byte):short[]sRefValue改为byte[]sRefValuechar[]psValue=newchar[2]{11,22};
解决方案九:
该回复于2008-07-31 09:14:23被版主删除
解决方案十:
我的字符数组里要装的就是寄存器里边的东西(即sRefValue这个数组里),我现在只是模拟一下。我所有调用的动态库(c++)写的DLL,里边有个函数是:DLLPROClong__stdcallRdMultiWord(intnSerialNo,intnStationNo,constchar*ucStartAddr,intnNum,shortsRefValue[]);而我想在C#中来用这个函数,那你们说准确的来说该怎么写?
解决方案十一:
发表于:2008-07-1412:47:277楼得分:0ifastringisreturned,then:StringBuilderpsValue=newStringBuilder(256);ifanarrayofcharsreturned,then(C++char=C#byte):short[]sRefValue改为byte[]sRefValuechar[]psValue=newchar[2]{11,22};INT型是不能转换为CHAR型的。。。

时间: 2024-09-17 22:52:16

在C#中如何调用这段C++的非托管代码???的相关文章

ios-在IOS中如何调用动态class?

问题描述 在IOS中如何调用动态class? 我遇到UIColor问题 从网络服务器获取颜色名字: Red, Blue, Magenta ....... 如何用这个设置一个view的背景颜色? 我只找到了像[UIColor redColor], [UIColor blueColor], [UIColor magentaColor]这些,但是不知道怎么编程实现可以调用这些动态获取颜色方法? help 谢谢-- 解决方案 添加这段代码: NSString *colorFromWeb = @"Red&

java-while (true)中代码运行一段时间后出现问题

问题描述 while (true)中代码运行一段时间后出现问题 下面是我写的一段java代码,希望通过循环不断的执行一些函数,但是运行一段时间后,程序没有出现异常,也没有停止,但是没有过像之前一样循环执行了,请教一下原因. int month = 0; int minute = 0; SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm"); Date dt = new Date(); String d = sdf.f

Java ssh框架开发的网站想每隔一段时间自动调用一段代码要怎么实现?

问题描述 Java ssh框架开发的网站想每隔一段时间自动调用一段代码要怎么实现? 用Java ssh框架写一个酒店管理系统,其中有一个预定客房模块,我希望过一天就查一下预定客房记录表如果某个客房这天已经被预定了就更新它的状态,这要怎么实现? 解决方案 可以使用quartz,具体用法google下. 解决方案二: 一个简单但是不好的方法,在js中设置个定时器(setinterval()),每隔多少时间异步调用查询预订客房记录 解决方案三: 使用Spring中的定时器把 解决方案四: 使用spri

JS调用某段SQL语句的方法_javascript技巧

如何通过JS调用某段SQL语句,这样的需求在报表.数据平台开发中很常见.以报表平台FineReport开发为例,例如在点击某个按钮之后,来判断一下数据库条数,再决定下一步操作.那这在后台如何实现呢? 解决思路 实现这个功能,首先需要了解Finereport内置的公式,SQL函数,这个肯能大家都懂,就不做介绍了. 调用FineRepor的内置公式:FR.remoteEvaluate("具体公式"),返回值为:这个具体公式的结果. 例如: var a = FR.remoteEvaluate

.cs文件中能否调用html页面内写的js函数

问题描述 第一,能否将cs文件中函数的返回值传入到html页面中或者是在cs函数中能否调用html页面内的js函数,如果可以的话如何实现.求大神指点. 解决方案 解决方案二:html是由asp生成的,没有传递的说法解决方案三:那能不能直接去调用那里的js函数呢??解决方案四:理论上是可以用ScriptManager调用,但这样做一般都没有必要,搞明白了动态网站工作原理和js本质后,回头再看这些需求,你会发现,处理方法很多,都比后台调用页面js好解决方案五:当一个页面在浏览器上展示的时候,web服

jsp-JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答

问题描述 JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答 背景: 楼主使用Myelipse新建了一个Web项目,在编写一个JSP文件的时候遇到一个问题,首先是使用了img,并且写了一个事件,代码如下: <imgclass="poke" src="poke/back.jpg" title="hit" id="play_id_3" onClick="change_pic()&qu

swift 中怎么调用其他类的协议

问题描述 swift 中怎么调用其他类的协议 比如我创建了一个协议protocol 一个类 我想在这个类引用这个协议请问怎么实现? 感激不尽! 解决方案 朋友的需求有点模糊,举个protpcol的例子给朋友吧 创建协议: 遵循协议: 在实现协议的类中实现协议方法

ios-IOS中如何调用Rootviewcontroller?

问题描述 IOS中如何调用Rootviewcontroller? 我希望在ios应用中能实现查看用户是注册用户还是新用户,如果还没注册的用户,就会转到注册页面.代码如下: if (user != register){ RegisterViewController *registerViewController = [[RegisterViewController alloc] init]; RearViewController *rearViewController = [[RearViewCo

谈谈JAVA中的调用方式

很多书籍都说Java支持传引用调用的方式,类似于C++中的Person &a引用调用,而近来编程遇到一系列问题让我对此产生了怀疑,于是将这些方法一一列出,我们来一起看看JAVA中的调用方式:   看下面的程序:  class Person {      private String name;//姓名     private String sex;//性别     public Person(String x, String y) {         this.name = x;