用StringBuilder来代替char[],如[DllImport("DxfTree.dll")]
public static extern int GuoxpCreate( StringBuilder szFileName, RECT rect);

解决方案 »

  1.   

    好像Rect也不能直接这么用,要进行Struct序列化
      

  2.   

    例如:
    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {    
    public int Top;    
    public int Left;
    public int Width;    
    public int Height;    
    }
    不过要与你dll引用的一样
      

  3.   

    谢谢 Knight94(愚翁) 
    我先试试,不行的话还要麻烦你#83
      

  4.   

    完整的应该如下:
    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {
    public int Top;
    public int Left;
    public int Width;
    public int Height;
    }[DllImport("DxfTree.dll")]
    public static extern int GuoxpCreate( StringBuilder szFileName, RECT rect);不过我不知道你的RECT如何定义的,只要把上面的RECT进行相应修改就行了。
      

  5.   

    嗯 编译没问题!!!
    不过这只是声明方法,下面还要引用:
    GuoxpCreate(szFileName, rect);
    第一个参数没有问题:我可以把打开的文件名传过去
    可是第二个参数:   。我应该怎么赋值给它
      

  6.   

    不会传进去,怎么调用的,是不是像如下RECT rect = new RECT();
    rect.Top = ..;
    rect.Left = ..;
    rect.Width = ..;
    rect.Height = ..;StringBuilder szFileName = new StringBuilder( 256 );
    szFileName.Append( yourFileName );//Calling function
    GuoxpCreate(szFileName, rect);
      

  7.   

    给你发信被退回,你的邮件地址有“...”这主要要看你的dll中的参数和返回值,如果用到以Struct或者Class定义的对象作为参数或者返回值的时候,需要进行序列化,否则你无法与dll进行交互。这一点在调用dll来说是比较麻烦的。如果你对C++比较熟的话,建议你用VC .net来操作要简便一些,然后做成类库,再供c#调用。