2 van xfx van_xfx 于 2016.05.07 11:05 提问

请问这个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#中是怎样的呢???

6个回答

van_xfx
van_xfx   2016.05.14 12:17
已采纳

已解决,谢谢各位。我解决如下:
[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;
    }
qq_34912380
qq_34912380   2016.05.07 11:16

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)
{
//数据保存操作
}
}
}

van_xfx
van_xfx   2016.05.07 11:49

对应dllimport怎么声明?

van_xfx
van_xfx   2016.05.07 11:54

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

showbo
showbo   Ds   Rxr 2016.05.07 12:26
yechang5913
yechang5913   2016.05.08 10:16

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!