如果C函数传递,或者返回字符串指针,C#如何调用?

问题描述

如果C函数传递,或者返回字符串指针,C#如何调用?假设C函数:extern"C"DLL_EXTERNCHAR*__stdcallget_str(void);extern"C"DLL_EXTERNvoid__stdcallset_str(CHAR*);extern"C"DLL_EXTERNCHAR*__stdcallget_set_str(CHAR*);C#如何调用?

解决方案

解决方案二:
char*一般用string类型代替,参数的话,也可以用string类型代替,但是当参数为结构数组的时候,一般都用ref或者out去传递。
解决方案三:
看看这本书《精通.NET互操作》
解决方案四:
好像C#有IntPtr这个接口,接收后在进行类型转换
解决方案五:
http://topic.csdn.net/u/20110514/17/bcbdd4d8-43bf-4c54-aa45-bb0177ede001.html看看这个帖子吧^_^主要就是了解System.Runtime.InteropServices.Marshal这个类的用法……

时间: 2024-10-21 20:21:53

如果C函数传递,或者返回字符串指针,C#如何调用?的相关文章

C语言实现返回字符串函数的四种方法_C 语言

前言 C语言返回字符串函数共有四种方式,分别如下:       使用堆空间,返回申请的堆地址,注意释放       函数参数传递指针,返回该指针       返回函数内定义的静态变量(共享)       返回全局变量 下面来看看详细的介绍 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 使用分配的内存,地址是有效 char *fun() { char* s = (char*)calloc(100, sizeof(char*) ); if (s) strcpy ( s , "abc &qu

Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇也就够了,不过我也尽量陈述的很详细 一.指针 要说指针,其实通俗易懂的话来说,他应该是保存内存地址的一个变量,我们来看一下小例子 #include <stdio.h> #include <stdlib.h> main(){ //int 变量 int i ; i = 5; //打印i的值

c++-关于C++函数返回字符串char*的问题

问题描述 关于C++函数返回字符串char*的问题 比如 char* fun() { char s1[10]; char *s2=new char[10]; //return s1; 报错,不能返回局部变量 return s2; } int main(int argcchar** argv) { char* s=fun(); delete[] s; //是否有必要??如果是返回const char*呢?? } 因为涉及到内存管理,实在太烦了 解决方案 S1 是静态的地址,不是局部变量的原因.s2

malloc-关于返回数组指针的函数

问题描述 关于返回数组指针的函数 函数的代码如下: int *cal(int *a,int num) { int digit=sizeof(a)/sizeof(int); int *result=a; int *b=(int *)calloc(digit+1,sizeof(int)); for(int i=0;i { b[i+1]=(result[i]*num+b[i])/10; result[i]=(result[i]*num+b[i])%10; } if(b[digit]>=1) { int

C语言中返回字符串函数的四种实现方法

原文:http://blog.csdn.net/turkeyzhou/article/details/6104135 有四种方式: 1.使用堆空间,返回申请的堆地址,注意释放 2.函数参数传递指针,返回该指针 3.返回函数内定义的静态变量(共享) 4.返回全局变量 ******************以下摘自csdn****************************** 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 使用分配的内存,地址是有效char *fun(){ char*

c++-C++ main()函数返回字符串

问题描述 C++ main()函数返回字符串 如题,怎样在main()函数里返回字符串? 如: string main() { return "hello"; } 这样不行的,该怎么办? 解决方案 main函数的返回值是固定的,只能是int 如果你要在另一个程序调用,你可以用cout输出,另一个程序从standard input获取. 解决方案二: main函数是入口函数,返回值为int是为了能够通过-1.0.1等识别运行的状态. 你要返回字符串,可以自己定义一个函数. 解决方案三:

(九十五)函数与C-风格字符串

当传递给函数的是C-风格字符串时,和将数组传递给函数类似. 但传递C-风格字符串给函数时,首先是代码: char a[10] = "abcdef"; char *b = a; 函数原型:char abc(char* a,int m); //m是字符串长度,非必须 这个时候,将字符串传递给函数的时候, 参数有三种形式: ①abc(a); //这种方式是将字符串作为参数 ②abc(b); //这种方式是将指向字符串的指针作为参数 ③abc("abcdef"); //这种

传递和返回数据到一个Delphi编写的UDF

数据 [UDF系列之四]:传递和返回数据到一个Delphi编写的UDFWarton译作者: Chris Levesque, Tina Grubbe, Brett Bandy -------------------------------------------------------------------------------- [译者叙]: 前面我已经翻译了几篇关于编写UDF的文章,虽然一些朋友可能也从中得到了一点帮助,但是可能对UDF的认识还存在一些问题.今天,我再翻译两文章,这两篇文章

线程中的回调函数如何获得返回值,请高手开悟,在线等......

问题描述 普通回调方法:classA{classBxx=newclassB();stringss=k.ca(tm);stringtm(stringxm){returnxm+"一杯醉倒";}}classB{publicdelegatestringtc();publicstringca(tcmm){MessageBox.Show("到这里了!");returnmm("我");}}执行stringss=k.ca(tm);语句后,得到回调函数tm的返回值