回 帖 发 新 帖 刷新版面

主题:急!!!Dll的调用格式

请教各位大虾,以下是一个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个回复)

沙发

我这样调用为什么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);

板凳

EastRiver.TICRecord[]  strRecord=new EastRiver.TICRecord [1200];
你只声明没有复职哦。

3 楼

int nLine= EastRiver.BatchReadRecord(hPort,ref strRecord,1200);
加一个ref试验一下

4 楼

加了Ref就出错,未处理的异常出现在应用.exe文件中

5 楼

第 2 楼   

EastRiver.TICRecord[]  strRecord=new EastRiver.TICRecord [1200];
你只声明没有复职哦。

这样也不行,其实定义数组用new就相当于初始化了呀。
循环赋值后出错,错误为:“Meal.exe 中的 0x77f813b1 处未处理的异常: 用户断点 。”

6 楼

new只是开辟了内存空间给它,然后系统应该NULL给它。
你是如何循环赋值的?循环赋值后出错,在哪里出错?

7 楼

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 楼

int nLine= EastRiver.BatchReadRecord(hPort,   strRecord,100);
会不会是函数调用的问题?

9 楼

而且你都给"空"值,行不行的?

10 楼

strRecord是作为返回值输出的,它是读消费机的记录数据,strRecord返回的是一条记录

我来回复

您尚未登录,请登录后再回复。点此登录或注册