日期:2014-05-17  浏览次数:21011 次

请问c#如何调用C++dll里面的结构体和指针
现在的项目需要用C#调用C++的dll接口,c++自己调用dll的接口的demo源码如下
if ( !VCAInitSdk( hWndMain ) ) // hWndMain为视频显示所在的窗口句柄
{
// VC404卡驱动初始化失败}

m_pDev = new DEVICE_INFO[ m_dwDevNum ];
if ( !m_pDev )
{
// 系统初始化错误}

我自己c#的代码如下:
[DllImport("Sa7134Capture.dll", EntryPoint = "VCAInitSdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Winapi)]
        public static extern bool VCAInitSdk(int hWndMain, bool bInitVidDev, bool bInitAudDev);//初始化SDK
if (!VCAInitSdk((int)this.Handle, true, true))//如果初始化SDK成功
            {
                MessageBox.Show("视频初始化失败!");
            }
写到这里m_pDev = new DEVICE_INFO[ m_dwDevNum ];就不会了,DEVICE_INFO是结构体,m_pDev应该是指针,但我在c#里面就不知道改怎么写了,请问哪位告知一下,谢谢

------解决方案--------------------
结构体,C#里也有啊,照着样子定义一个就行。
m_pDev不是指针吧,从结构体里取的,是一个值类型啊
------解决方案--------------------
你应该在C#中定义一个和C++对应的结构,有一个工具可以用(winsiggen),用它,你只需要把C++结构体COPY进去,它会自动给你生成c#对应的结构体。m_pDev应该是个结构体数组。
------解决方案--------------------
定义一样的结构体,指定结构体中属性的内存长度。这样内存对齐就可以用了。