哪位大哥/大姐使用C#调用过infoplus21_api.dll?
实时数据库在另一台机器上。
我知道infoplus21_api.dll是用C/C++写的,调用的时候使用DllImport。
我的代码如下:
/// <summary>
/// 错误信息
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct ERRBLOCK
{
[MarshalAs(UnmanagedType.I2, SizeConst = 16)]
public short ERRCODE;
[MarshalAs(UnmanagedType.I8, SizeConst = 32)]
public long ERR1;
[MarshalAs(UnmanagedType.I8, SizeConst = 32)]
public long ERR2;
}; /// <summary>
/// 根据列名称返回列编号
/// </summary>
/// <param name="sFieldName">列名称</param>
/// <param name="iFieldNameLength">列名称长度</param>
/// <param name="iFieldId">列编号</param>
/// <param name="errors">错误信息</param>
[DllImport("infoplus21_api.dll", EntryPoint = "DECODFT", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void DECODFT(string sFieldName, short iFieldNameLength, ref int iFieldId, ref ERRBLOCK errors); /// <summary>
/// 根据位号名称返回位号编号
/// </summary>
/// <param name="sRecordName">位号名称</param>
/// <param name="iRecordNameLength">位号名称长度</param>
/// <param name="iRecordId">位号编号</param>
/// <param name="errors">错误信息</param>
[DllImport("infoplus21_api.dll", EntryPoint = "DECODNAM", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void DECODNAM(string sRecordName, short iRecordNameLength, ref int iRecordId, ref ERRBLOCK errors); /// <summary>
/// 连接数据库
/// </summary>
/// <returns>1连接成功,0连接不成功</returns>
[DllImport("infoplus21_api.dll", EntryPoint = "INISETC", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern bool INISETC(); /// <summary>
/// 断开数据库
/// </summary>
[DllImport("infoplus21_api.dll", EntryPoint = "ENDSETC", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void ENDSETC(); protected void Page_Load(object sender, EventArgs e)
{
if (INISETC())
{
myDiv.InnerHtml = "数据库连接成功!";
int iRecordId = 0;
int iFieldId = 0;
ERRBLOCK errors = new ERRBLOCK();
string sRecordName = "M_XTC_CJB_FIQ_F122_S";
string sFieldName = "Name";
DECODNAM(sRecordName, (short)(sRecordName.Length), ref iRecordId, ref errors); //4294967295
DECODFT(sFieldName, (short)(sFieldName.Length), ref iFieldId, ref errors);
myDiv.InnerHtml += (sRecordName + "编号:" + iRecordId.ToString() + " " + sFieldName + "编号:" + iFieldId.ToString());
ENDSETC();
}
else
{
myDiv.InnerHtml = "数据库连接失败";
}
}
//
我在调用INISETC()的时候总是返回1,即使我把网线断掉也返回1。
调用DECODNAM返回位号编号的时候总是返回-1,-1表示没有找到编号,而“M_XTC_CJB_FIQ_F122_S”这个位号是实时数据库中真实存在的。不知道那里出错了还是我的配置有问题。
那位大哥/大姐能帮助我?
实时数据库在另一台机器上。
我知道infoplus21_api.dll是用C/C++写的,调用的时候使用DllImport。
我的代码如下:
/// <summary>
/// 错误信息
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct ERRBLOCK
{
[MarshalAs(UnmanagedType.I2, SizeConst = 16)]
public short ERRCODE;
[MarshalAs(UnmanagedType.I8, SizeConst = 32)]
public long ERR1;
[MarshalAs(UnmanagedType.I8, SizeConst = 32)]
public long ERR2;
}; /// <summary>
/// 根据列名称返回列编号
/// </summary>
/// <param name="sFieldName">列名称</param>
/// <param name="iFieldNameLength">列名称长度</param>
/// <param name="iFieldId">列编号</param>
/// <param name="errors">错误信息</param>
[DllImport("infoplus21_api.dll", EntryPoint = "DECODFT", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void DECODFT(string sFieldName, short iFieldNameLength, ref int iFieldId, ref ERRBLOCK errors); /// <summary>
/// 根据位号名称返回位号编号
/// </summary>
/// <param name="sRecordName">位号名称</param>
/// <param name="iRecordNameLength">位号名称长度</param>
/// <param name="iRecordId">位号编号</param>
/// <param name="errors">错误信息</param>
[DllImport("infoplus21_api.dll", EntryPoint = "DECODNAM", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void DECODNAM(string sRecordName, short iRecordNameLength, ref int iRecordId, ref ERRBLOCK errors); /// <summary>
/// 连接数据库
/// </summary>
/// <returns>1连接成功,0连接不成功</returns>
[DllImport("infoplus21_api.dll", EntryPoint = "INISETC", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern bool INISETC(); /// <summary>
/// 断开数据库
/// </summary>
[DllImport("infoplus21_api.dll", EntryPoint = "ENDSETC", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void ENDSETC(); protected void Page_Load(object sender, EventArgs e)
{
if (INISETC())
{
myDiv.InnerHtml = "数据库连接成功!";
int iRecordId = 0;
int iFieldId = 0;
ERRBLOCK errors = new ERRBLOCK();
string sRecordName = "M_XTC_CJB_FIQ_F122_S";
string sFieldName = "Name";
DECODNAM(sRecordName, (short)(sRecordName.Length), ref iRecordId, ref errors); //4294967295
DECODFT(sFieldName, (short)(sFieldName.Length), ref iFieldId, ref errors);
myDiv.InnerHtml += (sRecordName + "编号:" + iRecordId.ToString() + " " + sFieldName + "编号:" + iFieldId.ToString());
ENDSETC();
}
else
{
myDiv.InnerHtml = "数据库连接失败";
}
}
//
我在调用INISETC()的时候总是返回1,即使我把网线断掉也返回1。
调用DECODNAM返回位号编号的时候总是返回-1,-1表示没有找到编号,而“M_XTC_CJB_FIQ_F122_S”这个位号是实时数据库中真实存在的。不知道那里出错了还是我的配置有问题。
那位大哥/大姐能帮助我?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货