c#调用c++开发的dll const char* 返回值接收问题
原文:c#调用c++开发的dll const char* 返回值接收问题
用c#调用视频接口相关的dll,dll使用c++开发。
c++接口定义如下:
PLATFORM const char* Plat_GetValueStr(const char* propertyName, int iUserHandle);
c#接口定义如下:
[DllImport(@"Platform.dll", EntryPoint = "Plat_GetValueStr", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
extern static IntPtr Plat_GetValueStr(string propertyName, int iUserHandle);
遇到的问题及解决方法:
1、在c#调用时一开始 CharSet = CharSet.Ansi 没有定义 出现过乱码。c++中的编码为ansi,c#默认可能是Unicode。这里需要注意一下。
2、对于c++ 返回值类型为 const char* 我一开始用String 接收,在framework4.0下也成功过,但有时成功,有时失败。在framework2.0下,从来没成功过。后来改用指针接收,成功接收了。
IntPtr ipName = Plat_GetValueStr(ConstControlUnit.ControlUnitName, iUserHandle);
ResName= Marshal.PtrToStringAnsi(ipName);
c#调用c++开发的dll const char* 返回值接收问题的更多相关文章
- C++ const char *返回值问题
今天写代码,遇到一个const char *返回值的问题,记录一下 问题场景:我写了一个动态库,有个函数声明如下: ; 函数定义如下: const char * HttpRequestImpl::RG ...
- C++如何调用C#开发的dll
序言 本文介绍一个C++如何调用C#开发的dll实例. 前言 C++编写的程序为非托管代码,C#编写的程序为托管代码.托管代码虽然提供了其他开发平台没有的许多优势,但由于前期系统及历史版本很多使用的是 ...
- const引用返回值
一.引用 引用是别名 必须在定义引用时进行初始化.初始化是指明引用指向哪个对象的唯一方法. const 引用是指向 const 对象的引用: ; const int &refVal = iva ...
- C++以const 作为返回值类型的意义
const rational operator*(const rational& lhs, const rational& rhs); 很多程序员第一眼看到它会纳闷:为什么operat ...
- c++ ado 调用存储过程并得到输出参数和返回值
// AccessSqlserverByAdo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h ...
- 【移动开发】Service类onStartCommand()返回值和参数
Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStart ...
- 【VS开发】recv函数函数返回值说明(特别有利于工程调试)
recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. ...
- C# 调用存储过程操作 OUTPUT参数和Return返回值
本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html 存储过程是存放在数据库服务器上的预先编译好的sql语句.使用存 ...
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
在工作当中经常遇到反编译后的jar文件,并要传入参数了解其中的某些方法的输出,想到Java里面的反射可以实现加载jar文件并调用其中的方法来达到自己的目的.就写了个Demo代码. 以下的类可以编译生成 ...
随机推荐
- python:时间处理模块
# coding=utf-8 from datetime import date, datetime import time def date_test(): print 'date.max', da ...
- java:利用数组实现将古诗词纵向输出
java:利用二维数组实现将古诗词纵向输出. 从网络上随便搜索一首古诗词,这里刻意选择句子长短不一的诗词 1.首先先把诗词放进一个二维数组中. 这里将数组类型定义成char 类型,因为将其定义为S ...
- css中居中的居中方法
1:给div设置一个宽度,然后添加margin:0 auto属性 div{ width:200px; margin:0 auto; } 2:居中一个浮动元素 确定容器的宽高 宽500 高 300 的层 ...
- windows 编程 —— 菜单以及其他资源
目录: 1.资源的种类 2.资源的定义方法(IDE:VC++) 3.资源的获取 4.资源的使用与消息处理函数 1.资源的种类 windows 的常用的资源包括:图示 .游标. 字符串. 自订资源. ...
- 利用golang语法检查对象是否实现了接口
var _ ipc.Server = &CenterServer{} CenterServer是否实现了 ipc.Server的接口.编译期间检测,这是很好的编程实践. 稍后详述...
- android recovery 主系统代码分析
阅读完上一篇文章: http://blog.csdn.net/andyhuabing/article/details/9226569 我们已经清楚了如何进入正常模式和Recovery模式已有深刻理解了 ...
- cocos2d-x 在mac下执行 demo
搞了好久,最终成功了. 记录一下 前辈的文章. 依照这个弄的 .http://blog.csdn.net/taowenyin/article/details/11750127 前辈的这个文章是在win ...
- C++标准库之 Lower_Bound, upper_Bound
关于二分查找,这绝对是最简单却又最难的实现了,其各种版本号能够參见http://blog.csdn.net/xuqingict/article/details/17335833 在C++的标准库中,便 ...
- Swift Core Data 图片存储与读取Demo
实体的模型定义: 实体的class定义: @objc(ImageEntity) class ImageEntity: NSManagedObject { @NSManaged var imageDat ...
- 超好用文件对比工具 – Beyond Compare
超好用文件对比工具 – Beyond Compare,开发中文件.目录对比神器,有了它,再也不用为找不到修改的内容而发愁了. 具备的丰富实用功能: 并列比较文件夹.FTP 网站或 Zip 文件: 为以 ...