C#调用C++DLL时char *类型参数的值不会变,求支招。

我用C++做了一个DLL,code如下:
char* ReadString(const char *sec, const char *key,char *def, const char *file)
{

ZeroMemory(strReturnValue,sizeof(strReturnValue));

int i = GetPrivateProfileString(sec, key, "",strReturnValue, 2048, file);

def = &strReturnValue[0];

return strReturnValue;
}
然后用C#来调用这个函数,code如下:
[MarshalAs(UnmanagedType.LPStr)]
StringBuilder def;
private void button1_Click(object sender, EventArgs e)
{
string a = "No data exsit.";
def = new StringBuilder(a);
string file = Environment.CurrentDirectory + "\uConfig.ini";

        string aa = iFunction.ReadString("Config", "MesDB", def, file);    
    }
            不知道为什么这个char *def的值就是改变不了,一直为a,  但ReadString方法的返回值是正常的,求支招。
0

1个回答

当然不会改
char *def
那么你只能改这个指针指向的内容本身
def = &strReturnValue[0];
你这个是让def指向另一个地方,但是指针本身作为形参不会反应到实参

试试看
strcpy(def, strReturnValue);
不过你要保证def有足够的长度。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# 调用C++DLL(函数参数包含指针)
C#调用C++DLL,C++DLL中的函数参数包含指针。 绝对可用。
C#调用C++的Dll(参数和返回值為char* TCHAR*)
想要在C#和C++之间进行字符串传递会涉及到两件事情:nn1.C#的string和C++的字符串首指针要怎么对应.  n2.字符串分为ANSI和UNICODE.nnnC++ 头文件接口:nn//FilePolice.hnn//參數和返回值為Ansinextern "C" __declspec(dllexport) char* __stdcall EncryptString(char
c# 调用c库dll 遇到char*转string的解决办法
最近由于有个未知的设备需要用到modbus通讯协议,底层需要与PLC通讯,坤跌,PLC啥型号也不清楚封在里面不能拆,前人只留了几个不能运行的QT代码以及不完整的文档。用惯了C#想要重新学QT,真不知猴年马月能完成项目。于是乎找了一个开源的基于C语言开发的modbus库,撸起袖子干了起来。撸代码的过程中,遇到调用c 库的char*转c#的string多次不成功的情况,各种冒框啊,折腾了大半天才算解决...
C#调用C++dll,C++中char*与C#类型的对应关系
最近在编写C#上位机应用程序,需要调用C++的dll,期间遇到dll接口库中char*类型纠结了很久,试过string,StringBuilder,StringBuilder结果都以失败告终,通过查找博客等资料最后找到了救命稻草---IntPtr。例子如下:rnC++dll接口函数:rnvoid JT_ReaderVersion(int icomID,char* szReaderVersion,i
c# 调用c库dll ,char*转string的解决办法
最近由于有个未知的设备需要用到modbus通讯协议,底层需要与PLC通讯,坤跌,PLC啥型号也不清楚封在里面不能拆,前人只留了几个不能运行的QT代码以及不完整的文档。用惯了C#想要重新学QT,真不知猴年马月能完成项目。于是乎找了一个开源的基于C语言开发的modbus库,撸起袖子干了起来。撸代码的过程中,遇到调用c 库的char*转c#的string多次不成功的情况,各种冒框啊,折腾了大半天才算解决...
C# 调用C++dll中接口,返回const char*
const char* 是由构建的JSON 转 std::string ( toStyledString() ) 然后 c_str();在C#中使用的时候就无法获取正确的字符串;使用 string来接收、使用IntPtr接收都是乱码原因应该是定义在接口函数中的std::string 为临时变量,所以定义了一个 全局静态变量 static std::string g_str;用全局静态变量来传递JS...
【技术资料】在C#调用C的DLL函数中,字符串[宽字符/Unicode]的传入和传出
using System;nusing System.Runtime.InteropServices;nusing System.Text;nnnamespace TESTDLLn{n class Programn {n static void Main(string[] args)n {n //向C++提供的参数n ...
C# 调用C++非托管DLL, C++中的const char *对应C#中的IntPtr类型。
C# 调用C++非托管DLL, C++中的const char *对应C#中的IntPtr类型。
Unity使用C#调用C++dll传递指针参数、接收指针返回值
C#调用C++返回指针参数rnrn用IntPtr接收返回rnrn下面是引入DLL的代码片段:rnrn[DllImport("BthExports")]rnpublic extern static IntPtr BthGetName(UInt64 ullAddr);rnrn其返回的内容为一个Uint64的数组,我们可以用“IntPtr”来代替这个C++方法体返回的指针,我们可以先来看一下“IntPtr”的定义:“In
C#调用C++ DLL 传出字符串,C++ DLL传参问题
C++ .h文件rnVIDEO_DLL_API int __cdecl PlatformQueryRes(char* pcSvrIpAddress, char *pcLoginUserName, char** ppcResult);rnC++ .cpp文件rnint __cdecl PlatformQueryRes(char* pcSvrIpAddress, char *pcLoginUserNa
C#接收C++动态库返回字符串char*,在C#端如何接收并得到正确的字符串
最近调用动态库传数据,发现C#接收C++动态库返回字符串char*,在C#端设置对应类型为string无法接收到正确值,最后想到在C#端先用字节数组接收返回的字符串,然后再将字节数组转换为对应的字符串,数据接收终于正确 n首先打开VS2012,新建项目->Visual C++,选择Win32项目,如图选择dll n n新建项目的名字为dlltest,新建头文件dlltest.h,在源文件dlltes
通过JNA让Java调用Dll方法
研究java调用dll的时候,大部分都是通过jni,比较麻烦,我找到了通过jna方法调用dll的方法,用起来比较方便,只需要引用jna.jar包,这个jar包已经包含在程序中,还包含了我调用dll的遇到难道的解决办法。
C#调用C++动态库如何接收C++数据类型为char*
1、托管类型和非托管类型区别 n托管: 指内存管理由系统而不是程序员管理,.net,C#等(自动垃圾回收机制) n非托管:内存由程序员手动释放,C++ n严格意义来说,没有非托管C++,托管只是一种对C++的扩展,如C++/CLI,使用别的办法也可由系统管理内存。 n托管代码:由CLR(公共语言运行库)执行的代码,CLR服务如:自动垃圾回收、运行库类型检测、安全支持等。 n非托管代码:由操作系统直接
C#获取C/C++返回值为wchar_t*的内容
最近想练习用WPF写界面,调用API的时候发现太麻烦,每个参数要自己声明类型,于是准备写一个DLL,在DLL里面调用API,将结果返回(字符串)。n先上DLL函数,wchar_t* GetErrorCodeStr(DWORD dwError)n{n static wchar_t buff[1024] = L"No text found for this error number.";
C#调用C++DLL二级指针处理方式
我的项目中实际遇到的是char**的二级指针,C#怎么调用呢?首先,在C++中char*和c#中的string类型是等价的。char**二级指针,就是个二位数组,等价于C#string类型的一维数组。经过一番思考,我用IntPtr接收C++的char**。问题是,用IntPtr接收char**怎么从内存中获取string数组呢?看了Marshal这个类中,有个PtrToStructure这个方法,...
Python工作笔记-往dll中传入char*类型的参数并且如何接收char*的值
dll中getColorName对应的定义声明如下:nnnn nn因为Python中没有char这种数据,所以直接用会有如下的问题:nn源码如下:nnnimport ctypesnnif __name__=='__main__':n ll=ctypes.cdll.LoadLibraryn lib=ll("judgeColor.dll")n print(lib.getColorName("red.p...
C#调用非托管C++DLL的两种方法
C#编写的代码属于跨平台的托管代码,C++语言可以编写托管(managed)和非托管(native)代码。在C#与C++的混合编程中,经常会使用C#来调用nativen C++的DLL,下面有两种常用的调用方法供大家参考。nnnnn使用P/Invoke直接调用native C++ Dlln里面的函数。(注:此方法只能调用函数,不能调用class)。nnnC#通过C+
Golang与DLL交互
Golang与DLL交互n 在系统级编程中,经常需要使用C/C++来编写模块给Go调用,目前官方支持这种调用,但是需要CGO做支撑。 n 这里研究了Golang与DLL进行数据交换的几种方式,(重点是:指针,结构体,回掉函数)并做以测试。 n依赖条件: nC接口形式的DLL(这里使用了VS2015编写) nCGO依赖的GCC(这里使用Qt5.9自带的Minigw) n1. DLL代码
C#调用C++ dll 的带char*类型的函数
C++ dll的某条函数nnnextern "C" _declspec(dllexport) char* __stdcall test03(char* inStr);nnnnnC#中进行调用nnn[DllImport("test.dll",EntyPoint = "test03",CallingConvention = CallingConvention.StdCall)]npublic sta...
jna调用系统dll文件并且获得返回参数的实例
采用java jna4.1 调用C编写的dll文件,获得返回结果,且获得返回参数的例子
2017.10.11 C#调用C++ 动态库内存溢出问题
最近在写C#调用C++ 动态库的例子,发现使用Stringbuider 时,重复使用时容易造成内存溢出的问题,网上查了之后 发现可以使用 Stringbuider .Remove(0, Stringbuider .Length)方法,但是经过测试后并没有解决问题。 n后来经过仔细分析,发现使用 n StringBuilder cRegResult = new StringBuilder(512);
C# 调用C/C++ DLL库的回调函数
1、在 C/C++端rn定义一个函数指针rnTypedef void (*TESTBACK)(int a, int b);rnrnrn定义一个带函数指针的函数rn__declspec(dllexport int add(TESTBACK ptsTestBack, int a, int b)rn{rnreturn ptsTestBack(a, b);rn}rnrnrn2、C# 端rn声明回调函数的委
Python调用Dll(so)获取信息(Python char** 字符串二维数组)
今天根据业务需要,使用Python调用C++编写的so,调用相关接口获取部分信息,实现过程大致如下:nnC/C++端:nn/**n  *获取信息(分配内存并赋值)n*/nextern "C" __declspec(dllexport) void getInfo(char** pInfos) {n    *pInfos = new char[strlen(TEXT_OUT) + 1];n    st...
delphi 编写dll返回pchar 类型出现乱码
前段时间 rn 用delphi 为公司开发的dll rn 当使用pchar 作为返回值时 rn 发现一些语言接收到的数据中包含乱码问题。rn 应该是返回指针类型是数据出错。rnrn 于是在每一个函数返回前 在其返回值后添加 char(0) 做结束字符。rn 一个char(0)不够 ,就再加一个。rn 测试pb 中没有再出现次情况了rn vb 中接收返回值 需要做一些处理rn [c...
C#调用C++dll文件获取数据得到乱码的解决方法
很久没写博客了,最近空闲下来,有空整理了下最近几个项目,把遇到的一些问题记录下来。rnrn       做一个视频二次开发的项目,是与大华的dss平台进行对接。在获取摄像头名称的时候经常出现乱码,刚开始以为是编码问题,测试了各种编码方式,最后都没有解决。rn       最终没办法,最后咨询大华研发,因为对方只会C++,而我们的项目是C#开发,双方在代码上面沟通了很久,才发现是因为结构体初始化后,
delphi 调用C语言的动态库DLL函数
一、C语言函数原型nn1、接口函数定义n函数原型nvoid card_trans(int com,char * pUpdata,char * pDownData);n返回值为0时,交易成功,非0时为交易失败。nn2、调用传入参数定义n传入首地址必须符合结构体pUpdata,传出首地址必须符合结构体pDownData.n结构体pUpdata和pDownData的定义分别如下:ntypedef str...
(已更新)关于混合编程中C#调用C/C++DLL碰到具有数组、指针的参数或返回的解决办法(亲测)!
更新部分直接看文章最后!nn        nn如题,最近一段一直在搞工控类项目的上位机调度软件开发,由于扫描模块是余博用C++写的, 所以涉及到混合编程的问题了。nn        C#调用C++DLL的方法网上都有,把DLL放进exe的生成目录内,然后引用System.Runtime.InteropServices命名空间,然后在主类内部加上外部引用声明就好了。nnn [DllI...
C#调用DLL之TCHAR xxx[]参数的传递
C++的函数代码为:nnn//得到指定序号的对象名称n//输入参数: nEntityIndex 指定对象的序号(围: 0 - (lmc1_GetEntityCount()-1))n//输出参数: szEntName 对象的名称ntypedef int (*LMC1_GETENTITYNAME)(int nEntityIndex,TCHAR szEntName[256]);nn由于出现了TCHAR...
delphixe3调用C语言开发的dll接口中参数之间数据类型转换及处理
写这篇博客的原因:之前我是用delphi7开发,在调用c版的dll接口时从没有出现过问题,后来升级为delphixe3版本开发时,出现一些令人头疼的问题,我费了很大劲才解决。nnDelphixe3出现如下问题:nnnn举个例子:dll文件接口定义如下nnnint testDLLfun(unsigned char*a,unsigned long aLen, unsigned char* b, un...
通过ffi在node.js中调用动态链接库
通过ffi在nodejs中调用动态链接库sodll文件n概述n为什么要在nodejs中调用动态链接库nffi简介与安装n注意事项n煎蛋栗子n获取C接口的指针内容n异步调用n实际案例n通过ffi在node.js中调用动态链接库(.so/.dll文件)概述为什么要在node.js中调用动态链接库n由于腾讯体系下的许多公共的后台服务(L5, CKV, msgQ等)已经有了非常成熟的C/C++编写的API,
jna对指针、字符串参数传递的使用
C/C++部分代码:nnn#include <stdio.h>nextern "C" __declspec(dllexport) void PT(char* a, float *b);nnvoid PT(char* a, float *b){n printf("%s , %f",a,*b);n}nnJAVA部分代码:nnnimport java.nio.FloatBuffer;nnim...
C#调用C++DLL,正确接收与传递中文字符方法
通常,c++ dll库字符编码方式都为utf-8,c#调用dll时,若遇到中文字符的接收与传递,会出现中文字符显示乱码与无法传递。 n按照对应关系,若dll中参数为char[],例如char[64] name;则对于的c#字符定义为: n [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] n public string name; n若name
go 调用dll char*传输
参考:http://www.voidcn.com/article/p-ofnbgvoa-bpv.htmlnnhttps://stackoverflow.com/questions/53721215/syscall-mustloaddll-mustfindproc-throws-the-specified-procedure-could-not-be-fonnc++:nnMYLIBDLL ch...
c#调用包含结构体嵌套的C++ dll函数
在痛苦了两天后,终于搞定了。主要是中文乱码问题,最后受C#调用C/C++DLL收取中文字符处理这篇文章的启发,才弄好。核心思想:c++中的char是一个字节,wchar 是两个字节,c#中的char是两个字节。rn====================== C++代码==========================rn里面出现的TCHAR为:rntypedef wchar_t WCHAR;rntyp...
引用包java.lang.ref中几种引用详解 2 -- 测试代码
NULL 博文链接:https://jackyin5918.iteye.com/blog/1882071
求支招
n n n nn nn n n 前几天后台有个小伙子问我:甲大,我最近正在按照你的教程搞点爬虫写写,以前都是写爬虫就是采集几百来条信息,都是本地文件里面的。但是这一次,我采集了1024全站图片,我玩了个...
C# 调用C dll文件,无法加载问题
如图在VS中直接引用添加时出现错误。需要直接将dll添加到项目生成的exe同一个文件夹下,或者在Import时采样绝对路径或相对路径方式。
C++调用C#dll-虚拟化方式(clr)
这段时间有个工作,需要把C#开发的DLL集成到成熟的C++开发的平台里面,在网上查到了两种方法:COM组件和虚拟化(clr),第一种方法要麻烦些,但C#DLL的路径可以不是exe的目录,第二种方法要简单些,但C#DLL的需要放到exe目录下,并且引用C#DLL的exe或DLL需要公共语言运行时支持(/clr)。综合网上的资料,解决了第二种方法需要C#DLL放到exe目录下的问题,并在VS 2010下通过测试。
C#调用C++带指针参数函数
C++ DLL代码nntypedef void (__stdcall *fnSavedCB)(int savedLen);nn__declspec(dllexport)nvoid __stdcall testSaveData(fnSavedCB fn)n{n for (int i = 0; i < 10; ++i) {n fn((i+1)*1024);n }n}nn...
c/c++中_stdcall与dll动态调用
1._stdcall在动态dll调用中的注意事项rnrn为了用vc写的dll能被其它语言的写的程序使用,即实现跨语言。我们在dll的函数调用约定中使用__stdcall .rnrn但当用GetProcAddress调用是却失败了.rnrnrnrn用dumpbin工具查看导出的函数名可以看到:导出的函数名确实为_mygetGrad@20rnrn所以我们要阻止导出的函数名被编译器修改,方法就是使用de
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 不会java 大数据学习 不会java学习大数据

相似问题

2
编写函数del(char str[])将字符串str中的小写字母删除
1
求问这个C++程序为什么是错的.
1
int main(int argc, char ** argv)代码运行时无法输入内容怎么办?
1
求e指数,Microsoft Visual C++ 根据老师给的程序以及提示进行改错。
1
MFC 对话框客户区外添加标尺功能 求大神给个模板 或者用什么类能实现
1
[新人求解答]一个C++题目
1
1020 月饼 ,测试案例有三个不能通过,提示错误,求帮助!
2
Windows Mono C#调用C++ DLL DllNotFoundException 问题
1
在VC6.0中调用SQL存储过程对XML类型数据如何处理?
0
这是一个C++的无向图邻接矩阵,深度优先和广度优先遍历,实在不知道哪里不对,求大神解答
2
动态数组第一个个元素的值,两次输出数值不一样
1
关于数组的初学者的问题。要求键入一个3*4矩阵,然后求每一行和和每列和,
2
对有规律的求第几个数为几,谢谢各位大佬,救救孩子吧QAQ
2
C# 读取C++写的 二进制文件
3
1072 开学寄语,AC时三个测试都通不过,提示格式错误,答案错误,求助
2
使用eclipse写C++时编译通过却没有生成二进制文件?
2
这是一个C++的排序算法,运行结果总是不正确,求大神帮帮忙改一下
1
C++MFC初学者求大佬们指教!用GetParent()获取父对话框指针的语句写在子对话框的头文件时,报错了。
2
1066 图像过滤,AC时为什么提示超时?
6
有没有大神告诉我一下 c++中 char* word 和 char *word的区别