BCB与JAVA布尔类型的冲突问题,返“假”却得到“真”!

BCBPLC 2015-05-23 09:48:03
C++BUILDER 6写的DLL返回bool 值,JAVA调用却显示出问题,
“假”却成了“真”,怪。
DLL中简单代码是:
#define CDLL extern "C" __declspec( dllimport )
CDLL int isOpened()
{
bool test=false;
return(test);
}

到了JAVA里,用JNA方式调用 test.DLL
函数名 boolean _isOpened()
结果得到的却是“真”,费了一个晚上的时间。
探讨原因。
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2015-05-24
  • 打赏
  • 举报
回复
windef.h 中定义的很清楚, BOOL 就是 int
BCBPLC 2015-05-24
  • 打赏
  • 举报
回复
试了一下 ,用BOOL代替bool果然不再有问题, 说明java的boolean与BOOL都是四个字节。
BCBPLC 2015-05-24
  • 打赏
  • 举报
回复
试了一下 ,用BOOL代替bool果然不再有问题, 说明java的boolean与BOOL都是四个字节。
BCBPLC 2015-05-24
  • 打赏
  • 举报
回复
的确bool 是一个字节,BOOL是四个字节, 居然不同。 用BOOL 肯定对了。
ccrun.com 2015-05-23
  • 打赏
  • 举报
回复
那就在C++这边用BOOL
BCBPLC 2015-05-23
  • 打赏
  • 举报
回复
#define CDLL extern "C" __declspec( dllexport ) CDLL int isOpened() { bool test=false; return(test); }
BCBPLC 2015-05-23
  • 打赏
  • 举报
回复
DLL中简单代码是: #define CDLL extern "C" __declspec( dllimport ) CDLL int isOpened() { bool test=false; return(test); } 这是调用时的 H文件, 在DLL是dllexport
BCBPLC 2015-05-23
  • 打赏
  • 举报
回复
原因可能是: C++BUILDER的bool 类型是1个字节,而JAVA的boolean类型是一个字,即4个字节, C++BUILDER DLL函数返回一个字节,而JAVA就认为四个字节,取了不该取的单元, 不再是0了,就变成“真”了。 现在把返回 bool,索性改成 int ,就没有这事了。
ccrun.com 2015-05-23
  • 打赏
  • 举报
回复
DLL中定义的是dllimport ?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧