2013-03-04 49 views
3

我正在研究简单的电话应用程序,我正在更改panasonic pbx扩展的服务级别。为此,我正在使用“Tapi32.dll”,它具有C++中的方法。现在根据我的需要,我必须传递两个整数指针类型的参数。一个参数正确地通过,但我无法通过结构类型的第二个参数argumnet。如何将结构作为C中的指针传入C#

这里是我的代码...

[DllImport("Tapi32.dll", CharSet=CharSet.Auto, SetLastError=true)] 
unsafe private static extern int lineDevSpecific(int* hLine, int* lpParams); 

[StructLayout(LayoutKind.Sequential)] 
public struct UserRec { 
    [MarshalAs(UnmanagedType.I4)] 
    public int dwMode=4; 
    public int dwParam1=8; 
} 

unsafe static void Main(string[] args) { 
    int vline=int.Parse("Ext101"); 
    int* hline = &vline; 
    lineDevSpecific(hline, ref UserRec userrec); 
} 
+0

http://stackoverflow.com/questions/4558082/passing-an-struct-array-into-c-dll-from-c-sharp – 2013-03-04 08:16:39

回答

1
[DllImport("Tapi32.dll", SetLastError=true)] 
unsafe private static extern int lineDevSpecific(int* hLine, IntPtr lpParams); 

unsafe static void Main(string[] args) { 
    int vline=int.Parse("Ext101"); 
    int* hline=&vline; 

    var sizeUserRec=Marshal.SizeOf(typeof(UserRec)); 
    var userRec=Marshal.AllocHGlobal(sizeUserRec); 
    lineDevSpecific(hline, userRec); 
    var x=(UserRec)Marshal.PtrToStructure(userRec, typeof(UserRec)); 
    Marshal.FreeHGlobal(userRec); 
} 

看看这个答案的问题的

你可以找到一些更使编组更容易和更可重用。

+0

Thanx Alot先生它的工作! – vikas 2013-03-04 08:33:43

+0

@vikas:不客气。 – 2013-03-04 08:36:24

+0

肯先生我得到错误“不能有实例字段初始值设定项在结构c#” – vikas 2013-03-04 09:08:01