首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vb.net:如何构造为IntPtr

问vb.net:如何构造为IntPtr
EN

Stack Overflow用户
提问于 2022-11-04 15:55:43
回答 1查看 92关注 0票数 2

我有一个vb6.0 (基本)项目,我想迁移到新的vs2022。大多数代码只是翻译“或多或少”好,但也有一些亮点。我试过上网,但找不到解决办法。所以我的问题是:

我有以下代码:

代码语言:javascript
复制
Public Structure Test
    Dim a as long
    Dim b as long
    ....
End structure

Public Sub xyz()
    'here im filling Test structure locally
    a = test... 
    ..

    A(a)
End sub

我要调用的外部dll函数是A([In] IntPtr Data)。

所以用我的测试结构调用A是失败的,在vb6.0中,它运行得很好。我不知道有什么问题。我试过一些东西,但我不知道

我希望它可以像在vb6.0中那样编译。我还没有触及这个代码的任何部分。

另一件事是VarPtr()函数不再可用。vs2022的替代品是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-07 00:29:34

当我需要将结构作为指针Intptr传递给非托管API时,我将执行以下操作:

  1. 分配结构大小的非托管内存。Dim buffer As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(GetType(T)))

  1. 传递到非托管API.

的结构指针。

当非托管方法返回时,使用:Marshal.PtrToStructure(Of T)(buffer)将指针转换为结构。

Marshal.FreeHGlobal(buffer)

  1. 不要忘记释放以前分配的非托管内存
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74319732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档