我想用C#调用VC++DLL中的某个返回int*类型的函数,请问在C#中如何得到函数返回值,即整数数组的每个成员?

 我来答
狮是搞完泪18
推荐于2018-04-28 · TA获得超过270个赞
知道小有建树答主
回答量:257
采纳率:0%
帮助的人:259万
展开全部
在C#中如果只用指针的话,需要用到unsafe关键字
[DllImport(XXX.dll)]
unsafe private extern static int* 函数名();
unsafe private void 函数名()
{
int* nP = 函数名();
int n = *nP;
nP++;
}
函数名是你DLL中的函数名
通过指针运算符,访问每一个元素,前提是你得知道数组里有多少个元素
追问
我知道unsafe可以,不过如果用IntPtr类型代替int*返回类型作为C#中包装的函数的返回值,得到的是一个整数值,我猜想可能是地址,是否可以利用这个地址直接得到数组的值??初学C#求指教!
追答
如果用IntPtr类型也是可以的,可以使用Marshal.ReadInt32方法来从指定地址读取一个四个字节的Int32类型的变量
IntPtr nP;
Marshal.ReadInt32(InP);
读取下一个Int32类型的变量的时候,需要更新一下地址
nP += Marshal.Sizeof(typeof(Int32));
Marshl.ReadInt32(nP);
百度网友27e30e5cf
2013-03-21 · TA获得超过4722个赞
知道大有可为答主
回答量:1.5万
采纳率:0%
帮助的人:3472万
展开全部
如果只有指针在C#中,需要使用unsafe关键字
对我有用[0(XXX.DLL)]

不安全的私有外部静态int *函数名();

不安全的私人void的函数名称()

{

* NP =函数名();

廉政n = * NP的

NP + +;

} BR />函数名是您在DLL中的函数
通过指针操作符来访问每个元素的名称,前提是你必须知道数组中的元素的数量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
█╬卍╬█
2013-02-26 · TA获得超过162个赞
知道小有建树答主
回答量:115
采纳率:0%
帮助的人:167万
展开全部
c# 调用c++ dll 返回值为数组指针
如果c++dll的函数返回值为 数组指针,c#这边我需要怎么定义函数,怎么接收呢?
c++ 原型:
_declspec (dllexport) int* shuju()

C# code
[DllImport("xxxxx.dll")]
public static extern IntPtr shuju();

再使用这个:
Marshal.Copy(IntPtr,Int32[], Int32, Int32)

将数据从非托管内存指针复制到托管Int32数组。

public static void Copy (
IntPtr source,
int[] destination,
int startIndex,
int length
)

然后就和用普通数组一样了

上一个回答的方法也不错

但是面临一个共同的问题,没办法知道数组的长度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式