社区
C#
帖子详情
c++函数中的指针参数怎么转为c#函数
haodafeng2012year
2012-05-17 10:39:15
比如我有一个c++函数
void func(unsigned short *m)
{
unsigned short *n=new unsigned short[5]{1,2,3,4,5}
m=n;
}
这样在我调用func函数时通过m指针就可以得到 1,2,3,4,5这五个数
但是如果想用c#调用func怎么弄呢
我是写成 void func(uint[] m)
但是调用的时候m只能得到m[0],调用m[1]就说是数组越界了
高手帮忙看看哪里出问题了
...全文
203
10
打赏
收藏
c++函数中的指针参数怎么转为c#函数
比如我有一个c++函数 void func(unsigned short *m) { unsigned short *n=new unsigned short[5]{1,2,3,4,5} m=n; } 这样在我调用func函数时通过m指针就可以得到 1,2,3,4,5这五个数 但是如果想用c#调用func怎么弄呢 我是写成 void func(uint[] m) 但是调用的时候m只能得到m[0],调用m[1]就说是数组越界了 高手帮忙看看哪里出问题了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qldsrx
2012-05-23
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
自己把问题搞定了,有同样疑惑的朋友可以看我的文章http://www.360doc.com/content/12/0517/14/2150347_211658720.shtml
[/Quote]
你自己提问没有说清楚,看你发的文章才知道,你是通过委托的形式在使用这个函数。
另外即使你使用Intptr,这个数组长度根本不知道,Marshal调用的时候,必须指明长度,你如何保证不越界?不是我没有想到Intptr,而是你给的条件不充足。
haodafeng2012year
2012-05-23
打赏
举报
回复
自己把问题搞定了,有同样疑惑的朋友可以看我的文章http://www.360doc.com/content/12/0517/14/2150347_211658720.shtml
haodafeng2012year
2012-05-23
打赏
举报
回复
抱歉哈,因为提问的时候我也不知道问题到底出在哪里,所以问的也没法很具体。不过我把问题解决了,希望遇到同样问题的朋友能在我这得到帮助吧
haodafeng2012year
2012-05-17
打赏
举报
回复
怎么分配非托管内存?c#调用c++我还不熟悉,能写个简单的代码么?
Saleayas
2012-05-17
打赏
举报
回复
如果函数签名是这样的。
那么我估计在说明文档里会说明,这个传入参数 m 数组的长度。
而且,函数内部可能使用 = 赋值,而是使用赋值内存。
此时,你需要分配一个非托管内存来做参数。
haodafeng2012year
2012-05-17
打赏
举报
回复
to:bdmh ref ushort只能得到一个变量的值吧,我这是想要的到整个指针指向的数组的值,能说的稍微具体点么
to:saleayas 我的c++函数是在dll中,不能改c++函数,只能在c#调用时想办法,你有更好的建议么
Saleayas
2012-05-17
打赏
举报
回复
void func(unsigned short **m)
{
unsigned short *n=new unsigned short[5]{1,2,3,4,5}
*m=n;
}
bdmh
2012-05-17
打赏
举报
回复
ref ushort
Saleayas
2012-05-17
打赏
举报
回复
你最好能提供一个 C++ 版的调用这个函数的样例。
qldsrx
2012-05-17
打赏
举报
回复
试试void func(ref uint[] m)
C#
获取
c++
函数
指针
(
c++
函数
指针
转换为
C#
方式表示)
转自:https://www.cnblogs.com/keanuyaoo/p/3317911.html
C#
和
c++
之间相互传递
函数
指针
在
C++
和
C#
之
中
都有很多callback method,可以相互调用吗,怎么传递,是我表弟的问题. 1.定义
c++
dll ,导出方法 // sort.cpp : 定义 DLL 应用程序的导出
函数
。 // #include "stdaf...
C++
C#
相互调
函数
指针
按照之前对
C++
函数
指针
的理解,
C++
函数
指针
为内存地址,可以用int或者intptr_t保存地址信息,在需要调用时候再转换成相应的
函数
指针
。委托作为
C#
的
指针
实现形式,那么理论上可以用
C#
的IntPtr类型接
C++
返回的intptr_t地址后在转换为
C#
的委托对象。然后通过委托对象执行
函数
调用。理论上也可以把
C#
的
函数
转换成IntPtr传递给
C++
,
C++
得到intptr_t后把地址转换成相应的
函数
指针
执行
函数
调用。 首先实现
C++
的dll库代码 提供的申明头 #include <string>
C#
调用
C++
带
指针
参数
函数
C++
DLL代码 typedef void (__stdcall *fnSavedCB)(int savedLen); __declspec(dllexport) void __stdcall testSaveData(fnSavedCB fn) { for (int i = 0; i &lt; 10; ++i) { fn((i+1)*1024); } } ...
C#
委托传递给
C++
函数
指针
C#
委托传递给
C++
函数
指针
原创作者游蓝海,转载请注明出处 最近在Unity
中
集成一些
C++
库,跨语言交互的时候遇到了一个坑——不能直接将extern方法的
参数
声明为委托类型。 因为将方法作为
参数
传递的时候,
C#
会自动创建一个临时的委托对象,然后将委托对象的
指针
传入
C++
。由于委托对象是临时的,在垃圾回收的时候回会被回收掉,导致
C++
端的
函数
指针
就变成野
指针
了。因此,在传递委托
参数
的时候,需要自...
C#
委托与
C++
函数
指针
的区别
委托与
函数
指针
辨析 我们常见到
C#
技术文献用“类似C/
C++
函数
指针
的东西”介绍委托。这样好像是有道理的,因为二者的确有深层次的相通之处。委托和
函数
指针
都描述了方法/
函数
的签名,并通过统一的接口调用不同的实现。但二者又有明显的区别,简单说来,委托对象是真正的对象,而
函数
指针
变量只是
函数
的入口地址。对于高层应用来讲,委托的灵活性和适用范围更胜
函数
指针
;但对于底层应用,
函数
指针
则是不可替代的。下面分...
C#
111,126
社区成员
642,540
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章