DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: wjy13061029975
今日帖子: 3
在线用户: 3
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/4/22 20:17:04
标题:
delphi调用.c   运行出问题求助 浏览:2446
加入我的收藏
楼主: 目前在deelphi调试  发现是.o里面出问题了  dll版能用我改成.o调用就出错
出错信息如下

EAccessViolation: Access violation at address 0041B549 in module 'hashBens.exe'. Read of address 00000054
Press <ENTER> to exit...
接口我是不是翻译错了??还是编译需要啥参数??

附件是全部源码
此帖子包含附件:keymark_201942220174.zip 大小:7.5K
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/4/23 1:30:44
1楼: .o是c语言的中间文件,妳这能支持?
----------------------------------------------
--
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/4/23 9:27:47
2楼: .o类似于.obj文件,.so才类似于.dll,.a类似于.lib,不过我之前只知道.o/.so/.a之类的东西是linux用的,windows下也能用吗?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/4/23 11:49:10
3楼: http://bbs.2ccc.com/topic.asp?topicid=561051
这个帖子的  gcc  32 64 linux64(安卓,不懂没测) 我都测试了没问题 另外昨天翻译了个aes 也没问题
目前就这个。。不知道为何 调用报错。
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/4/23 16:28:48
4楼: bcc 调用
delphi 连接 c++ builder 生成obj文件

bjhash.cpp:
Warning W8062 bjhash.cpp 177: Previous options and warnings not restored

bcc32 -O2 -d -w -w-aus -c bjhash.cpp
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 xuchuantao (暗黑天使) ★☆☆☆☆ -
普通会员
2019/4/23 18:46:45
5楼: 最新版可以支持.o文件的
----------------------------------------------
按此在新窗口浏览图片
作者:
男 xuchuantao (暗黑天使) ★☆☆☆☆ -
普通会员
2019/4/23 18:51:14
6楼: windows下可以使用MinGW来编译Linux程序,从而得到.o或者.a文件,最新版的Delphi可以直接支持.o文件
----------------------------------------------
按此在新窗口浏览图片
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/4/23 20:30:58
7楼: 我的疑问是.o是linux下的obj文件,delphi用的话应该也是编译为linux程序吧?可楼主是在exe里调用啊,难道这个exe不是windows程序?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 smartdata (Jack) ★☆☆☆☆ -
普通会员
2019/4/24 0:06:59
8楼: .o在编译win64位时会生成,不是linux专用的
----------------------------------------------
==========
作者:
男 parhelia (-_-) ★☆☆☆☆ -
普通会员
2019/4/24 9:33:35
9楼: 试了一下gcc生成的确实会出错,改用VC编译运行正常,不过这性能差距过于真实

Win32
 hash all:
  [gccHash]
    2048*1000000...     5.53s   9F7D8C53
    524288*4000...      5.53s   803CFDEC
    134217728*16...     5.78s   1108CD26
   * 356.28 MB/s
  [pasHash]
    2048*1000000...     14.70s  9F7D8C53
    524288*4000...      15.16s  803CFDEC
    134217728*16...     15.55s  1108CD26
   * 132.17 MB/s
此帖子包含附件:parhelia_201942493335.rar 大小:59.2K
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/4/24 15:31:31
10楼: 找到出问题的点   有可能优化有关 delphi 不认 或者认错。。  或许我错了但是结果是对的。
else {
   const uint8_t *k = (const uint8_t *)key;

    while (length > 12)
    {
      a += k[0];
      a += ((uint32_t)k[1])<<8;
      a += ((uint32_t)k[2])<<16;
      a += ((uint32_t)k[3])<<24;
      b += k[4];
      b += ((uint32_t)k[5])<<8;
      b += ((uint32_t)k[6])<<16;
      b += ((uint32_t)k[7])<<24;
      c += k[8];
      c += ((uint32_t)k[9])<<8;
      c += ((uint32_t)k[10])<<16;
      c += ((uint32_t)k[11])<<24;
      mix(a,b,c);
      length -= 12;
      k += 12;
    !!!!!!!!!!
    }

    switch(length)
    {
    case 12: c+=((uint32_t)k[11])<<24;
    case 11: c+=((uint32_t)k[10])<<16;
    case 10: c+=((uint32_t)k[9])<<8;
    case 9 : c+=k[8];
    case 8 : b+=((uint32_t)k[7])<<24;
    case 7 : b+=((uint32_t)k[6])<<16;
    case 6 : b+=((uint32_t)k[5])<<8;
    case 5 : b+=k[4];
    case 4 : a+=((uint32_t)k[3])<<24;
    case 3 : a+=((uint32_t)k[2])<<16;
    case 2 : a+=((uint32_t)k[1])<<8;
    case 1 : a+=k[0];
          break;
    case 0 : return c;
    }
  }
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/4/24 15:38:18
10楼: Win32
 hash all:
  [gccHash]
    2048*1000000...     3.45s   9F7D8C53
    524288*4000...      3.55s   803CFDEC
    134217728*16...     3.95s   1108CD26
   * 547.85 MB/s
  [pasHash]
    2048*1000000...     16.03s  9F7D8C53
    524288*4000...      16.61s  803CFDEC
    134217728*16...     17.45s  1108CD26
   * 119.80 MB/s

Press <ENTER> to exit...

/* Orginal: http://burtleburtle.net/bob/c/lookup3.c ;*/
  /* To build :
   *  MinGW32:
       gcc foo.c -O2 -shared -ofoog.dll
   *  MSVC:
       cl foo.c /O2 /LD /Fefoov.dll
   */
要梯子哎。

https://github.com/kroki/Cuckoo-hash/raw/master/src/lookup3.c
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/4/24 16:32:10
11楼: 标记下大项目。
https://github.com/OISF/
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/5/16 16:33:33
12楼: :start
Cl /O2 /c bjhash.cpp
pause
goto start
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2021/1/17 22:01:53
13楼: 平台win
关于不能调用  gcc 生成的  .o  问题总结   (我调用了一个AES.C没问题)
本贴代码中多处用了类似
switch(length)  

编译方法 
gcc -m32 -s -Wall -O2 -c main.c -o gcc32.o
gcc -m64 -s -Wall -O2 -c main.c -o gcc64.o  
源代码   关键 switch 
uint32_t __cdecl set(uint32_t a,SqList* b)
{
  int i;
  i = 0;

   switch(a)
        {
          case 0:{ 
          b->a0 = 1;
          i = 0;
          break;}
          case 1:{ 
          b->a1 = 1;
          i = 1;
          break;}
          case 2:{ 
          b->a2 = 1;
          i = 2;
          break;}
          case 3:{ 
          b->a3 = 1;
          i = 3;
          break;}
          case 4: { 
          b->b0 = 1;
          i = 4;
          break;}
          case 5:{ 
          b->b1 = 1;
          i = 5;
          break;}
          case 6:{ 
          b->b2 = 1;
          i = 6;
          break;}
          case 7:{ 
          b->b3 = 1;
          i = 7;
          break;}
          //   default:printf("error");;
        }
    return i;
}

Delphi连接后运行 汇编
0060E47B 64668D4000       lea ax,[eax+$00]
set_gcc:
0060E480 8B442404         mov eax,[esp+$04]
0060E484 8B542408         mov edx,[esp+$08]
0060E488 83F807          cmp eax,$07
0060E48B 0F87CF000000     jnbe $0060e560
0060E491 FF248500000000   jmp dword ptr [eax*4+$0000]   红色部分Delphi并未处理好偏移 或许是标准不一样导致不认识
0060E498 8DB42600000000   lea esi,[esi+$0000


gcc生成汇编文件
_set:
  pushl  %ebp
  movl  %esp, %ebp
  subl  $16, %esp
  movl  $0, -4(%ebp)
  cmpl  $7, 8(%ebp)
  ja  L2
  movl  8(%ebp), %eax
  sall  $2, %eax
  addl  $L4, %eax
  movl  (%eax), %eax
  jmp  *%eax
  .section .rdata,"dr"
  .align 4





https://www.cnblogs.com/marklove/p/14290443.html
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行107.4219毫秒 RSS