导入C/C 功能到C#

Import C/C++ function into C#

本文关键字:导入 功能      更新时间:2023-10-16

i有一些C代码,使用P/Invoke从C#调用。我正在尝试为此C函数定义C#等效。

SomeData* DoSomething();
struct SomeData
{
    ...
}

如何将此C方法导入C#?我在定义函数的返回类型时遇到困难。

编辑:我有很多功能要导入。这是让我卡住的。

[DllImport("SomeDll.dll")]
public static extern IntPtr DoSomething();

我考虑使用intptr,即使它以正确的方式之后的方式正确?

我不太确定我理解您的问题,但我会在回答它方面做出镜头。您需要定义从C函数返回的结构,并使用元帅。ptrtoStructure来使用返回的结构。

[DllImport("SomeDll.dll")]
public static extern IntPtr DoSomething();
public struct SomeData
{
    //...
}
//code to use returned structure
IntPtr result = DoSomething();
SomeData structResult = (SomeData)Marshal.PtrToStructure(result, typeof(SomeData));

我猜想您要实现的目标是:

  1. 您的C/C 本机方法不采用任何参数,并将指针返回到结构。
  2. c#等效是返回intptr(指针)。

问题是您无法将INTPTR解析为C#

中的结构

...研究:

元帅。

http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspx

您可以像So

一样包装代码
public static class UnsafeNativeMethods
{
   [DllImport("SomeDll.dll")]
   private static extern IntPtr DoSomething(); //NO DIRECT CALLS TO NATIVE METHODS!!
   public static SomeData SafeDoSomething()
   {
      try
      {
         return (SomeData)Marshal.PtrToStructure(DoSomething(), typeof(SomeData));
      }
      catch(Exception ex)
      {
         //handle exception
      }
   }
}