2017-06-20 14 views
0

私は以下の問題を抱えています。C#.NETコードのポインタでC関数を呼び出す

関数入力として2つのポインタを持つ関数を実装するCで書かれた外部DLLライブラリを使用する必要があります。私はC#からこれを実行する方法がわからない...のような何かを:

typedef struct{ 
double[3] dArray; 
int a; 
int b; 
}myInput 

[...]

myFunction(myInput *input) 

私はC#で同様の構造体を定義することができますが、私は自分のコードを作成することはできませんうまく動作します C#からこれを行うことはできますか?前もって感謝します!

+0

int(16,32,64)のサイズはどのくらいですか? – jdweng

答えて

0

このようなコードを試してください。私はintとdoubleのサイズが分からない。 Intのcは16,32、または64です。倍精度は4または8(通常は8)です。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     [DllImport("XXXXXXXX.dll", CallingConvention = CallingConvention.Cdecl)] 
     public static extern void myFunction(IntPtr input); 

     [StructLayout(LayoutKind.Sequential, Pack = 1)] 
     public struct MyInput 
     { 
      [MarshalAs (UnmanagedType.ByValArray, SizeConst = 3)] 
      double[] dArray; 
      int a; 
      int b; 
     } 

     static void Main(string[] args) 
     { 
      MyInput myInput = new MyInput(); 
      IntPtr dataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(myInput)); 
      Marshal.StructureToPtr(myInput, dataPtr, true); 

      myFunction(dataPtr); 

     } 
    } 


} 
関連する問題