DLL中说明的函数原形如下:
IDENDLL int Scan(PHOTO *po)
IDENDLL int GetStatus(BOOL& CStatus,BOOL& SStatus)客户给了个用C++ BUILDER 调用此DLL的例子,如下:
typedef struct Card
{
CHAR szText[10][64];
RECT_S idRect[10];  //RECT_S是一个结构。
} CARD_S;
typedef struct 
{
void *IInfo;
int ISize;
unsigned char* IPhoto;
int PSize;
} PHOTO;Long Size   //Size的值经过计算得出。
PHOTO po;
CARD_S CInfo;
unsigned char* PhotoBuffer;
PhotoBuffer = new unsigned char [Size];
po.IInfo = (char*)&CInfo;
po.ISize=800;
po.IPhoto = PhotoBuffer;
po.PSize = Size;
Scan(&po);BOOL CState,SState;
GetStatus(CState, SState);我现在想在C#中调用这两个函数,但传的参数总不正确,请大家帮忙看看好吗?谢谢了!

解决方案 »

  1.   

    struct嵌struct,而且还是二维数组,用C#比较麻烦,
    在定义CARD_S这个struct的时候,加上
    [StructLayout(LayoutKind.Sequential)]
    标示。CHAR szText[10][64];:
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=640)]byte[] szText;你需要显示定义出RECT_S这个struct,然后用如上类似的方法去定义。至于
    photo这个struct要稍微容易一些
    可以如下:
    public struct Photo
    {
       IntPtr IInfo;
       int ISize;//Or Int16
       [MarshalAs(UnmanagedType.LPTStr)]   
       string IPhoto;
       int PSize; //or Int16
    }
      

  2.   

    不过用C#调用还是比较麻烦,用vc.net来调用要方便多了。