问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++/CLI 托管指针与非托管指针之间的转换

发布网友 发布时间:2022-05-14 15:22

我来回答

1个回答

热心网友 时间:2023-10-22 08:24

不太确定你想干什么。如果你单纯想把一个托管指针传给一个本地函数,那么应该用pin_ptr固定住这个托管对象,然后把pin_ptr变量转换成void *交给本地函数。类似于


ManagedType ^obj = gcnew ManagedType;
pin_ptr<ManagedType ^> pin = &obj; //固定住obj,不让它在内存中位置发生变化。注意这个只在pin变量的生存期内有效。
void *pobj = pin;
CFunction(pobj);

但是这样也只能传递一下而已,因为托管对象的指针在本地代码里是不能用的。除了在本地代码里临时保存托管对象给别的托管代码使用以外没什么意义。

ManagedType ^obj2 = *(ManagedType ^*)pobj; // 可以这样在转换回去。不过说老实话这么干各种危险。所有这些必须在pin的生存期内干。

如果你希望在C函数中直接使用托管类的对象。你大可让C函数直接接受托管对象。归根结底我还是不知道你要干什么。

追问您好,谢谢您的回答。
现在问题就是有一个c函数,比如这样void set_user_data( void *user_pointer)一个函数,我调用的时候这样调用:定义了一个托管类的指针,linphone ^ proxy;我想set_user_data(proxy);就是这个意思。这样肯定不行,就是有没有办法把proxy转为一个非托管指针?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
描写夏天的经典诗词(75首惊蛰诗词) 南瓜虾汤的做法 南瓜虾仁煲做法 南瓜虾煲是什么 有一个长方体体积是24立方厘米,底面是2厘米的正方形,侧面积是多少... 24 平米是多少平方 ...个连续自然数,体积是24立方厘米。它的表面积是多少平方 欧盟27国都有哪些 xlog是什么格式文件? 什么叫可数名词与不可数名词 猪字五笔怎么打 百雀羚怎么样适合哪个年龄阶段的 手机输入法“猪”怎么打 如何写一个托管和非托管下都能编译成功的C++结构体,方便在不同环境下调用? 猪五笔怎么打字 百雀羚适合年龄层是哪个层次的,有知道的吗? 猪的五笔怎么打 csharp 托管与非托管的区别,小弟先谢过了。 皮肤会出油可是会觉得好痒,是干燥吗 各位师傅你们好;我的机子是海尔台式机,型号是D5-D011。如何设置U盘优先启动 梦到我穿着胸罩好像在别人家里还有人 皮肤痒,出油 面部皮肤痒粗糙出油怎么办 脸上很油又很痒什么原因 梦到踩到人家的胸罩 海尔的这主板要怎么设置U盘启动? 冬季皮肤油腻以及瘙痒是怎么回事 做梦梦到自己穿了6,7个胸罩 皮肤瘙痒出油应该怎么做? 皮肤痒,皮肤容易出油,是什么问题 猪字用ALT+小键盘怎么打出来? 百雀羚适合多大年龄 如何在C#中使用C++类(非托管)和C函数 使用,对净DLL在非托管C问题,怎么解决 关于C#调用非托管C++dll传参问题(C#、C++高手进) 电脑怎么登录两个 c#调用非托管api时,函数参数中有枚举类型怎么做?怎么使用非托管类库 猪是怎样打斗的? 如何使用C#调用非托管DLL函数 C语言跟C#有什么不一样的 猪用数字怎么打? c#非托管系统 -- [StructLayout(LayoutKind.Sequential)],这种属性用来做什么啊? 去宾馆电梯里进了很多人电梯都没有响,这是什么电影? 用手机打这个“猪”的笔画怎么打的? 哪位大神有恐怖惊悚片电梯惊魂Elevator(2011)百度云资源链接求免费分享 电梯的恐惧之处在于——你永远不知道电梯门打开以后你会看到什么? 樱桃小丸子恐怖电梯是第几集 为什么恐怖电影总是有恐怖情节安排在电梯里? 蜡笔小新恐怖电梯是哪季 出现电梯恐怖事件的有哪些片子