主题:急!!!Dll的调用格式
wj993121
[专家分:0] 发布于 2005-11-16 16:56:00
请教各位大虾,以下是一个dll的VC调用格式,转成c#后是什么样式呀?C#应该怎样调用?谢谢!
struct TICRecord;
typedef TICRecord *PICRecord;
#pragma pack(push, 1)
struct TICRecord
{
char Card[20];
char timeString[20];
char EmpId[10];
int mark;
int flag;
int cardTimes;
int cardGroup;
} ;
#pragma pack(pop)
EASTRIVER_API int __stdcall BatchReadPrevRecord(HANDLE hPort, TICRecord * Records, const int Records_Size);
回复列表 (共13个回复)
沙发
wj993121 [专家分:0] 发布于 2005-11-16 17:04:00
我这样调用为什么strRecord中没有值呀,返回的int型值是正确地,就是strRecord没有值!?
[DllImport("EastRiver.dll")]
public static extern int BatchReadRecord
(
int hPort,TICRecord [] Records ,int arraysize) ;
public struct TICRecord {
public string Card ;
public string timeString;
public string EmpId;
public int mark;
public int flag;
public int cardTimes;
public int cardGroup;
};
EastRiver.TICRecord[] strRecord=new EastRiver.TICRecord [1200];
int nLine= EastRiver.BatchReadRecord(hPort, strRecord,1200);
板凳
franchdream [专家分:1450] 发布于 2005-11-17 12:36:00
EastRiver.TICRecord[] strRecord=new EastRiver.TICRecord [1200];
你只声明没有复职哦。
3 楼
ryowu [专家分:6470] 发布于 2005-11-17 12:53:00
int nLine= EastRiver.BatchReadRecord(hPort,ref strRecord,1200);
加一个ref试验一下
4 楼
wj993121 [专家分:0] 发布于 2005-11-17 13:59:00
加了Ref就出错,未处理的异常出现在应用.exe文件中
5 楼
wj993121 [专家分:0] 发布于 2005-11-17 14:03:00
第 2 楼
EastRiver.TICRecord[] strRecord=new EastRiver.TICRecord [1200];
你只声明没有复职哦。
这样也不行,其实定义数组用new就相当于初始化了呀。
循环赋值后出错,错误为:“Meal.exe 中的 0x77f813b1 处未处理的异常: 用户断点 。”
6 楼
franchdream [专家分:1450] 发布于 2005-11-17 14:44:00
new只是开辟了内存空间给它,然后系统应该NULL给它。
你是如何循环赋值的?循环赋值后出错,在哪里出错?
7 楼
wj993121 [专家分:0] 发布于 2005-11-17 14:54:00
EastRiver.TICRecord[] strRecord= new EastRiver.TICRecord[1200];
for(int i=0;i<1200;i++)
{
strRecord[i].Card ="";
strRecord[i].cardGroup =0;
strRecord[i].cardTimes =0;
strRecord[i].EmpId ="";
strRecord[i].mark =0;
strRecord[i].timeString ="";
}
int nLine= EastRiver.BatchReadRecord(hPort, strRecord,100);
当执行到int nLine= EastRiver.BatchReadRecord(hPort, strRecord,100);时出错
QQ:316675553
8 楼
franchdream [专家分:1450] 发布于 2005-11-18 08:43:00
int nLine= EastRiver.BatchReadRecord(hPort, strRecord,100);
会不会是函数调用的问题?
9 楼
franchdream [专家分:1450] 发布于 2005-11-18 08:44:00
而且你都给"空"值,行不行的?
10 楼
wj993121 [专家分:0] 发布于 2005-11-18 12:04:00
strRecord是作为返回值输出的,它是读消费机的记录数据,strRecord返回的是一条记录
我来回复