首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

bcb中DLL函数定义有关问题

2012-03-09 
bcb中DLL函数定义问题 - C++ Builder / Windows SDK/APIDLL函数定义如下:int DAWDataIndex0extern C _

bcb中DLL函数定义问题 - C++ Builder / Windows SDK/API
DLL函数定义如下:
int DAWDataIndex=0;
extern "C" __declspec(dllexport)_stdcall __int64 WtSys_GetCount(void)//
{
  if(DAWDataIndex>=0)
  return DAWDataIndex;
  else
  return -1;
}

调用的时候如下:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 Edit3->Text=WtSys_GetCount();
  if(WtSys_GetCount()>0)
  {
  vehcount++;
  Label1->Caption= vehcount;
   
  }
}
其中Edit3->Text显示为:0;是正确的。

可是如果DLL这样定义:
int DAWDataIndex=0;
extern "C" __declspec(dllexport)_stdcall int WtSys_GetCount(void)//
{
  if(DAWDataIndex>=0)
  return DAWDataIndex;
  else
  return -1;
}
调用还是和上面一样,
这个时候Edit3->Text显示为:89057710250655744;WtSys_GetCount()返回值显然是错误的。

请问int 与__int64区别在哪儿,不是可以相互转换吗?
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int i=10;
  __int64 j=12345;
  i=j;
  Edit1->Text=i;
}
这个显示是:12345;是对的;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  __int64 i=10;
  int j=12345;
  i=j;
  Edit1->Text=i;
}
这个显示是:12345;也是是对的;







[解决办法]
最好定义对应的类型变量获得WtSys_GetCount 的返回值
int i = WtSys_GetCount();
int64 i = WtSys_GetCount();
[解决办法]
int是32位的 int64是64位的

你如果dll里定义的函数原型返回值是int那么exe里也要一致
你在dll里返回的值通过eax寄存器返回的只有32位

但是你exe里声明的原型需要的返回值是64位所以就要从edx寄存器取另外的32位
而edx里的数是随机的 所以肯定要出错了

热点排行