PInvoke 取出char *指向的内容

问题描述

C++函数原型intGetConversationPeer(TIMConversationHandleconv_handle,char*buf,uint32_t*len);C++调用方式:constuint32_tMAX_LEN=20;charbuf[MAX_LEN]={0};uint32_tlen=MAX_LEN;GetConversationPeer(conv,buf,&len);printf("theidentifieris%sn",buf);C++中能成功取出buf的数据现在要转换成NET版本Pinvoke[DllImport(dllName,EntryPoint="GetConversationPeer",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintGetConversationPeer(IntPtrconv_handle,[In,Out]char[]buf,refUInt32len);NET调用方式:constUInt32MAX_LEN=20;UInt32len=MAX_LEN;char[]buf003=newchar[20];IMSDK.GetConversationPeer(conv1,buf003,reflen);但是buf003里面并没有被赋值请问,应该怎么样才能在NET中取出buf003数据呢

解决方案

解决方案二:
char*一般用stringbuilder来替换stringbuilder必须要按照buffer长度先进行初始化如果还不行试一下CallingConvention=CallingConvention.Cdecl改为CallConvention.Stdcall试下
解决方案三:
NET函数原型[DllImport(dllName,EntryPoint="GetConversationPeer",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintGetConversationPeer(IntPtrconv_handle,StringBuilderbuf,refUInt32len);使用方式:constUInt32MAX_LEN=1000;UInt32len=MAX_LEN;StringBuilderbuf001=newStringBuilder(1000);IMSDK.GetConversationPeer(conv1,buf001,reflen);buf001还是没有数据的调用约定就是Cdecl
解决方案四:
那len等于几?
解决方案五:
出来之后,len=0
解决方案六:
这是个out参数吧IMSDK.GetConversationPeer(conv1,outbuf003,reflen);
解决方案七:
引用2楼lpsswan的回复:

NET函数原型[DllImport(dllName,EntryPoint="GetConversationPeer",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintGetConversationPeer(IntPtrconv_handle,StringBuilderbuf,refUInt32len);使用方式:constUInt32MAX_LEN=1000;UInt32len=MAX_LEN;StringBuilderbuf001=newStringBuilder(1000);IMSDK.GetConversationPeer(conv1,buf001,reflen);buf001还是没有数据的调用约定就是Cdecl

函数调用返回值是多少?

时间: 2024-11-05 14:55:57

PInvoke 取出char *指向的内容的相关文章

C# 如何将char * 指向的内如取出

问题描述 如:我有一个结构体,里面有一个char*指向数据的地址,并且有一个nDataLength的变量表示数据长度问题:我如何取出char*中的数据到一个Byte[]中? 解决方案 解决方案二:char**相当于字符串数组.char*相当于字符串.你可以用string接受,并且用ToCharArray()装入数组.解决方案三:用string接收后的发现这个值一直都是"",所以改为了char*,然后想从指定的地址开始读长度的数据解决方案四:试试StringBuilder解决方案五:引用

sql-android取出SQL里面的内容,再JSon解析

问题描述 android取出SQL里面的内容,再JSon解析 我需要做一个展示自己收藏的文章的那种,收藏之后的文章在SQL里,是链接,取出来后,通过HTTP获得图片标题等.我怎么才能把收藏的所有文章的标题,获得并展示出来啊.有前辈帮帮忙吗 解决方案 取得网址内容后正则分析内容取得标题不同的网站可能正则规则是不同的.比如有的是 -- 有的是:....or ... 解决方案二: 取得网址内容后正则分析内容取得标题不同的网站可能正则规则是不同的.比如有的是 --有的是:<h1>....</h1

让IE后退时不取出Cache里的内容

cache 有朋友问我如何在ASP中实现让IE后退时不取出Cache里的内容,现在我告诉大家只要把下面的语句Copy到ASP的<head>...</head>就可以了: <%Response.Buffer=trueResponse.Expires=0Response.CacheControl="no-cache"%>

struts-怎样用Struts标签取出errors中的内容

问题描述 怎样用Struts标签取出errors中的内容 解决方案 以上说的都不是我要的答案,这个问题我已经解决 解决方案二: 既然是user.,那说明你有那样的实体.所以你需要有对应的set,get方法,然后在对应的页面上添加该字段,根据struts,能够获取到你传输的对应信息 解决方案三: 你是要使用哪个标签struts标签输出...迭代显示errors所有内容 /s:iterator

C指针通过编译器实现汇编语言类似内存间接寻址功能,编程语言的差异主要来自编译器的解释

C指针通过编译器实现汇编类似内存间接寻址功能, 编程语言的差异主要来自编译器的解释吧. 担心图片久了失效,我都重新转存的哈,希望造福对此感兴趣的同学们.. 参考URL: http://bbs.pediy.com/showthread.php?t=105674 http://blog.csdn.net/willjet/article/details/5792689 http://bbs.21ic.com/icview-45502-1-1.html 作者:乱雪 来源:hi.baidu.com/lu4

char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][], and so on in memory

本文测试环境 :  X86-64 bit 架构的服务器 CentOS x64 5.x gcc version 4.1.2 20080704 指针和数组是C的比较难搞懂的知识点, 需要结合内存来学习, 非常感谢各位兄弟为我指点迷津. 下面总结一下 :  首先说明一下C程序在运行时, 不同的内容或变量分别存储在什么地方? 分了几块区域分别是, code, constants, global, heap, stack; (内存地址从低到高) 其中constants存储常量(常量值不允许修改), glo

const char*

关于const char*的例子 #include<stdio.h> int main() { const char *p = "123"; p[1] = '3'; //会报错 p = "456"; //不会报错 printf("%s\n",p); return 0; } "123"是常量,放在代码区,不可修改,所以需要加上const char *,这样编译的时候,如果直接p[1] = 1,编译器就知道你给cons

指针-一个动态内存分配的问题,函数执行后p指向哪里?

问题描述 一个动态内存分配的问题,函数执行后p指向哪里? 一下是我的代码: #include<stdio.h> #include<stdlib.h> #include<string.h> char *strcnp(char *sd,char *ds) { char *q=sd; while((*ds++=*sd++)!='') NULL; return q; } int main() { char *a[4]={"abc","def&quo

C语言const指针和指向const的指针的理解

1.const 的理解     const 是C语言(C++)的一个关键字,需要注意的是,const 关键字是把变量变为一个只读的变量,绝对不是将这个变量变为常量.也就是说经过const 修饰的变量成为只读的变量之后,那么这个变量就只能作为右值(只能赋值给别人),绝对不能成为左值(不能接收别人的赋值).       经过const 修饰的变量,在定义的时候,就要进行初始化. const int a = 10;  // 正确 const int a;  // 错误       const 关键字最