C# 调用C++问题

问题描述

C#代码:[DllImport("Request.dll",CharSet=CharSet.Ansi,EntryPoint="dd")]publicstaticexternIntPtrdd(inta);publicstaticstringkey(inta){try{stringstr=Marshal.PtrToStringAnsi(dd(1));returnstr;}catch{return"";}}c++代码:TESTCPPDLL_APIchar*__stdcalldd(ints,LPSTRecode,LPSTRimei,LPSTRimsi,LPSTRdata,LPSTR_uinxtime_t){charstr3[50];char*test="252523524";char*test2="24234243";strcpy(str3,test);strcat(str3,test2);char*str=(LPSTR)str3;//sprintf(str3,"%s%s",APPID,APPSecre);returnstr;}问题:C#里面返回的字符串不对,是乱码.但如果直接return"dddddddd"这样就又正常.请问相连的字符串应该怎么操作.

解决方案

解决方案二:
charstr3[50];声明在函数内,生存在调用栈上,一旦调用结束,调用栈将被重置。因此返回str3的指针一定是错误的。一种改正方法是由调用方来提供char[50],类似staticexternintdd(inta,byte[]str3,intstr3Length);
解决方案三:
局部变量,内存被释放了,改为动态申请内存,或由c#提供内存

时间: 2024-11-03 21:05:18

C# 调用C++问题的相关文章

Windows 8应用开发之异步调用

 不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段时间内不影响用户与应用之间的交互体验,开发人员通常会使用异步调用技术,使得比较复杂的逻辑操作由异步进行,用户仍然可以继续使用应用,不会有无响应的等待情况出现. 本篇将通过一个简单的实例演示如何在Windows 8 应用中使用异步编程.首先我们来编写一个"Get Blogs"按钮,点击它可以从Windows Blog中获取博客列表.当然获取博客信息的过程是由异步进行的,这个过程中为了测试用户仍然可以与应用交互,我们再

C++ Builder调用Matlab

Borland C++Builder是一种新颖的可视化编程语言.在工程应用中,我们一般用C++Builder语言编写应用程序,实现交互界面.数据采集和端口操作等,但C++Builder在数值处理分析和算法工具等方面,其效率远远低于Matlab语言.在准确方便地绘制数据图形方面,Matlab语言更具有无可比拟的优势.此外,Matlab还提供功能强大的工具箱.但Matlab的缺点是不能实现端口操作和实时控制.因此,若能将两者结合运用,实现优势互补,将获得极大的效益. 本文结合实际介绍了应用Borla

javaweb-网页调用ocx控件打开或创建注册表的权限问题

问题描述 网页调用ocx控件打开或创建注册表的权限问题 在某几个win7 64位笔记本上, 通过服务器页面调用ocx读取注册表会提示无权限的现象,但使用本地html文件调用没问题, 不知是何原因,求大侠给点提示 解决方案 又试了一下,使用世界之窗浏览器可以正常使用了.但不明白为何? 解决方案二: ie本地file协议浏览(intranet)和http访问(internet)使用的是不同的安全设置,你按照本地的intranet安全配置internet安全设置 不过你这种需求没什么意义,只能针对特殊

请问下有谁调用过银联代付的接口

问题描述 请问下有谁调用过银联代付的接口 有前辈在吗,我可以贴代码,访问接口,返回值表示参数错误,我可以贴代码 解决方案 如果用java的话,可以参考以下链接的几个文件看看 http://www.chendw.cn/original/205.html 解决方案二: 贴出来吧哥们. 我也想知道

控制-flex4 fader.play()开始后调用fader.stop()出现的问题

问题描述 flex4 fader.play()开始后调用fader.stop()出现的问题 初始界面是这样 开始闪动在控制停止就变成白色的了把原有的背景颜色给覆盖了,请各位大神指导解决这个问题.我想要的效果是在停止时还可以改变闪动对象的背景颜色.覆盖图: 闪动图是这样:

新人一枚,请问怎样从B线程调用A线程的内容?

问题描述 新人一枚,请问怎样从B线程调用A线程的内容? 具体要求:写一个线程A,得到0-10的随机数,再写一个线程B来了调用线程A!!!!! 解决方案 int a;//全局变量,如果多个线程同步访问需要加锁 A...//线程A B...//线程B 代码结构大致如上,访问的时候,因为变量a是全局数据,所以在线程A和B中都可以直接访问,就好像C中的任何函数都可以访问和使用全局变量一样 解决方案二: 放是全局变量来交换数据

java se-使用泛型打印输出任意类型的数组,为什么调用时有错误?

问题描述 使用泛型打印输出任意类型的数组,为什么调用时有错误? import java.util.Arrays; public class FanXing { public static void printMatrix(T[][] matrix){ for(int i=0;i<matrix.length;i++){ System.out.println(Arrays.toString(matrix[i])); } } public static void main(String[] args)

Android Jni调用so库,加载库失败分析

现有一个项目,通过JNI接口调用底层库,例如:lib***.so 如下所示,总是加载不成功.调试发现,每次加载so库,会跳到catch异常处理部分,然后打印异常log信息. static{ try{ System.load("/data/data/com.***/lib/lib***.so"); } catch(UnsatisfiedLinkError ulink){ Log.i("HVnative====","Can not load library&q

PHP调用三种数据库的方法(3)

数据|数据库 Oracle(甲骨文)是世界上最为流行的关系数据库.它是大公司推崇的工业化的强有力的引擎.我们先看看其相关的函数: (1)integer ora_logon(string user , string password) 开始对一个Oracle数据库服务器的连接. (2)integer ora_open(integer connection) 打开给出的连接的游标. (3)integer ora_do(integer connection, string query) 在给出的连接上

线程-java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来

问题描述 java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来 1.用java调用sqlplus,将指定的存储过程下载到本地作为文本文件2.在java读取此本地文件做处理,处理后写1个新的文本文件在本地我将上面2个步骤用2个进程thread1,thread2因为步骤2必须等步骤1结束才能执行,所以我调用thread1.start()thread1.join()以及thread2.start().但是运行结果是每次都只执行出了步骤1,步骤2执行不出来.考虑是否在步