vc相关定义
typedef struct tagTCardInfo
{
char sCard[21];
double cFee;
unsigned int dStart;  
/*
struct dStart
{
int Year;
int Month;
int Day;
int Hour;
int Mintus;
int Seccond;

*/
char sName[21];
char sNo[19];
char SBarNo[21];
char sPwd[11];
char sRevers[21];
}TCardInfo;怎样在DELPHI中调用ReadCard函数extern "C" __declspec(dllexport) BOOL __stdcall ReadCard(TCardInfo *s)
{
char comport[2]="1";
    unsigned char buf[10];
   int i;
_itoa(1,comport,11);
if(!OpenPort(comport)) 
return GetLastError();
    if(!ReadABuffer((unsigned char *)buf,11))
{
ClosePort();
return false;
}
// TCardInfo ss;
for (i=0;i<11;i++)
s->sCard[i] = buf[i];
s->sCard[11]='\0';
// s = &ss;
// AfxMessageBox("Read card",1,1); return true;
}delphi我这样定义的
function ReadCard( s: pointer): Boolean; stdcall; far; external 'carddll.dll'; 
运行是没错,但执行到ReadCard 函数是报错procedure TForm1.Button2Click(Sender: TObject);
var i: Integer;
//  str: pointer; //array[0..30] of Char;
   str:^TCardInfo;
begin 
  if ReadCard(str) then  //执行到这里报错,通不过
  edit1.Text :=str.sCard
  else
    MessageBox(Self.Handle, '下载服务器数据失败,请重新下载!', '警告', 16);
 
end;

解决方案 »

  1.   

    这个结构体是谁定的?Delphi当中又是如何定义的?怎么看怎么象是一个本来是Delphi的结构体,然后被转换成VC的
      

  2.   

    是用DELPHI中转换过去的,delphi中定义:
      TCardInfo = record
        sCard: array[0..20] of char; //卡号 chr(0) 结尾。
        cFee: Currency; //余额
       // dStart: TDateTime; //办卡时间
        sName: array[0..20] of char; //用户姓名
        sNo: array[0..18] of char; //证件号码
        sBarNo: array[0..20] of char; //办卡网吧ID
        sPwd: array[0..10] of char; //网吧密码
        sRevers: array[0..20] of char; //保留字段
      end;
      

  3.   

    c++当中用double,为什么delphi当中用的是Currency,C++当中使用的是一个int表示时间,为什么delphi当中用的是一个TDateTime?
      

  4.   

    先不管那个时间,那个以注释了,delphi中Currency是货币型啊,C里好像没有这个类型,只能用double或float代替啊
      

  5.   

    dStart: TDateTime; 在C中要用什么类型呢,int吗?
      

  6.   

    C++里面怎么会没有Currency?我跟你说的这些就是说你两边的结构不匹配,这已经是一个相当严重的问题了,你还好象满不在乎。function ReadCard(var s: TCardInfo): LongBool (*Boolean*); stdcall; external 'carddll.dll'; 
      

  7.   

    既然你是要调C++的DLL,怎么可能管它有没有什么类型的呢?TDateTime实际就是一个double
      

  8.   

    你在C++当中也可以使用通过的SYSTEMTIME结构作为时间参数,或者使用Unix Time,这是一个int类型的。
      

  9.   

    A: function ReadCard(var s: TCardInfo): LongBool (*Boolean*); stdcall; external 'carddll.dll';
    B:function ReadCard( s: TCardInfo): Boolean; stdcall; far; external 'carddll.dll';
     请问为什么要这们写啊,LongBool (*Boolean*); 不太明白,谢谢
      

  10.   

    你把它放到IDE当中不就知道(*Boolean*)是什么意思了?再用sizeof(LongBool)和sizeof(Boolean)比较一下,再不就难道就不知道看帮助?看看Delphi的基本数据类型?