请问这个C++的dll在C#中怎么调呀?急……在线等!

C++中的调用:
extern "C" _declspec(dllimport) int ReadGzjzzData(char* pData,char* photo,int * iErrCode);

void CReadGzjzzDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
// OnOK();
char Data[64*1024] = {0};//各字段用双竖“||”分隔。
char photo[10*1024] = {0};
int iErrCode = 0;
BOOL ret = ReadGzjzzData(Data,photo,&iErrCode);
if(ret)
{
//数据保存操作
}
}
C#中是怎样的呢???

已解决,谢谢各位。我解决如下:
[DllImport("Gzjzz.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
private static extern Int32 ReadGzjzzData(IntPtr data, IntPtr photo, ref int iErrCode);

    public static int GPReadGzjzzData(ref string datastr, ref string photostr, ref int iErrCode)
    {
        int ERROR = 0;
        IntPtr data = Marshal.AllocHGlobal(64 * 1024);
        IntPtr photo = Marshal.AllocHGlobal(10 * 1024);
        int ret = ReadGzjzzData(data, photo, ref ERROR);
        datastr = Marshal.PtrToStringAnsi(data);
        photostr = Marshal.PtrToStringAnsi(photo);
        Marshal.FreeHGlobal(data);
        Marshal.FreeHGlobal(photo);
        return ret;
    }

public partial class CReadGzjzzDlg
{
public void OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
// OnOK();
sbyte[] Data = new sbyte[64 * 1024]; //各字段用双竖"||"分隔。
sbyte[] photo = new sbyte[10 * 1024];
int iErrCode = 0;
int ret = ReadGzjzzData(Data, photo, iErrCode);
if (ret != 0)
{
//数据保存操作
}
}
}

对应dllimport怎么声明?

这样不行,调用时提示:托管调试助手“PInvokeStackImbalance”在“C:\Users\Administrator\Desktop\222\sCardTest\readJzzInfo\bin\Debug\readJzzInfo.vshost.exe”中检测到问题。

C#调用c++ dll
http://blog.csdn.net/jiangxinyu/article/details/7848015
http://www.cnblogs.com/dragonwlb/archive/2013/04/04/2999729.html

[DllImport("你的.dll", EntryPoint = "#1你的第几个导出函数", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
static extern int ReadGzjzzData(StringBuilder pData,StringBuilder photo,IntPtr iErrCode);