C#接收C++动态库返回字符串char*,在C#端如何接收并得到正确的字符串
来源:互联网 发布:it产品经理培训 编辑:程序博客网 时间:2024/06/16 21:42
最近调用动态库传数据,发现C#接收C++动态库返回字符串char*,在C#端设置对应类型为string无法接收到正确值,最后想到在C#端先用字节数组接收返回的字符串,然后再将字节数组转换为对应的字符串,数据接收终于正确
首先打开VS2012,新建项目->Visual C++,选择Win32项目,如图选择dll
新建项目的名字为dlltest,新建头文件dlltest.h,在源文件dlltest.cpp中加入如下代码:
#include "stdafx.h"#include "dlltest.h"char s[20]="您好hahaha";int __stdcall test(char* str){ char attr[1024]; memset(attr,0,sizeof(attr)); memcpy(attr,s,sizeof(s)); memcpy(str,attr,sizeof(attr)); return 1;}
在dlltest.h中加入:
extern "C" _declspec(dllexport) int __stdcall test(char* str);
运行环境为debug模式,点击生成解决方案,在debug文件下可看到生成了dlltest.dll,这就是动态库文件。
打开VS2012,新建Visual C#控制台应用程序,命名为dlltestC
新建类文件Class1.cs,启动程序,运行空项目(debug模式),生成exe文件,打开exe所在目录,将之前生成的dll复制到该目录下,如图。
然后在Class1.cs中加入如下代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Runtime.InteropServices;namespace dlltestC{ public class Class1 { [DllImport("dlltest.dll", EntryPoint = "test")] public extern static int test(ref byte str); }}
最后在Program.cs中加入:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace dlltestC{ public class Program { static void Main(string[] args) { byte[] s = new byte[1024]; int t = Class1.test(ref s[0]);//用字节数组接收动态库传过来的字符串 string strGet = System.Text.Encoding.Default.GetString(s, 0, s.Length); //将字节数组转换为字符串 Console.WriteLine(strGet); } }}
运行该程序,输出:您好hahaha
阅读全文
0 0
- C#接收C++动态库返回字符串char*,在C#端如何接收并得到正确的字符串
- JNA 如何接收C层返回的char**数据
- C#调用C++动态库如何接收C++数据类型为char*
- 对Pandas for 2.7生成的字符串 C#在接收时的解决方法
- c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[] (zz)
- c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[] (zz)
- c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象
- 在C#中执行dos命令并返回结果字符串
- c# 向指定设备发个命令,并接收其返回的数据
- C#执行CMD命令并接收返回结果的实现方法
- matlab有多个返回值时C#如何接收
- c#的 UDP接收
- C#正确操作字符串
- 如何在PB中执行oracle存储过程并接收返回的数据集
- 在C#中如何在客户端接收信件
- 【C编程练习】华为2013校园招聘机试题3:对源字符串中得字符串进行查找替换并返回动态申请空间的指针char* Fun(char*pSrc,char*pOldStr, char*pNewStr)
- 字符串流stringstream无法正确接收字符串,而是接收了字符串的地址 -- 永远不要直接用类的成员
- Axis接收远程调用c# webservice返回的数组
- 理解RxJava(一)基本流程源码分析
- LintCode之28 搜索二维矩阵
- 一些工具的使用
- HDOJ 2520 我是菜鸟,我怕谁
- 201314
- C#接收C++动态库返回字符串char*,在C#端如何接收并得到正确的字符串
- 交大OJ 3021 有限背包(背包问题
- JAVA学习笔记——容器之Map
- SQL Server2008 学习之(十三) :T-SQL语言基础(上)
- Scrapyd部署爬虫项目
- 【2017.11.30】3. Longest Substring Without Repeating Characters-最长字串不重复字符
- java学习的第一个成果 一 简易的计算器
- Linux--选择、循环语句
- 计算机视觉基础-相机成像的几何描述