C#DLLimport函数返回指向结构的指针数组 [英] C# DLLimport function returning an array of pointer to structures

查看:227
本文介绍了C#DLLimport函数返回指向结构的指针数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,

我需要调用一个函数,该函数返回指向结构的指针数组:

这是C ++声明:

Hello,

I need to call a function which returns an array of pointer to structures :

here is the c++ declaration :

const VDXPluginInfo *const *VDXAPIENTRY VDGetPluginInfo();



它返回一个指向VDXAPIENTRY的指针数组,该数组由指向零的指针终止.

如何将其转换为从c#调用它?

当然,我在网上搜索,发现了很多关于参数中的指针数组的东西,但从未从函数返回.


谢谢.



it returns an array of pointers to a VDXAPIENTRY, which is terminated by a pointer to zero

How can I translate this to call it from c# ?

Of course, I searched the web, and found many things about pointer arrays in arguments, but never returned from function.


Thank you.

推荐答案

我猜我会尝试下一个尝试,但无法检查是否可行,我也没什么. br/>
I Guess i would try something as the next, couldn''t check if it worked though, i''ve nothin'' alike.

[DllImport("**YOURDLL**"]
private static extern int VDGetPluginInfo();

[StructLayout(LayoutKind.Sequential)]
private struct VDPointer
{
    public int VDXPlugin;
}

public List<intptr> GetPointers()
{
   VDPointer Result = new VDPointer();
   Result.VDXPlugin = -1; //we want our first run to go
   List<intptr> ToFill = new List<intptr>();
   int Retrieve = VDGetPluginInfo; //We should have gotten start adres of the array on our int
   
   while (Result. VDXPlugin != 0)
   {
      Result = (VDPointer)Marshal.PtrToStructure(new IntPtr(Retrieve), typeof(VDPointer));
      if (Result.VDXPlugin != 0)
      {
          Retrieve += 4; //Let's step to next pointer entry, assuming pointer is 32 bit int
          ToFill.Add(new IntPtr(Result.VDXPlugin));
      }
   }

   return ToFill;
}


我认为这应该可以解决问题,从那里您可以检索指针的内容相同:


I think this should do the trick, and from there u could retrieve the contents of the pointers the same:

VDXPluginInfo GetMe = (VDXPluginInfo)Marshal.PtrToStructure(List[0], typeof(VDXPluginInfo)); //etc etc


这篇关于C#DLLimport函数返回指向结构的指针数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆