DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: laidabin
今日帖子: 8
在线用户: 16
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 ztcjn (哎哟喂) ▲▲▲△△ -
普通会员
2017/12/14 4:05:39
标题:
求救~~~我用delphi写dll给其他语言调用 多线程执行下面的函数 程序崩溃了 浏览:1158
加入我的收藏
楼主: 有没用大神指点一下哪里问题啊 

另外delphi开发dll给其他语言多线程调用,是不是只能用widestring 数据类型??

我测试结果是不设置
IsMultiThread := TRUE;

只有widestring是在多线程下没问题的 

麻烦各位大神指教一下 刚学delphi 很多东西还不知道  

非常感谢~~


function GetTBytes(m_pBin: PByte; out len: Integer): TBytes;
var
  Addr: Cardinal;
  Dbyte: TBytes;
begin
  Addr:= Cardinal(m_pBin);  //把指针转成整数
  len:= PInteger(Addr + 4)^;   //把长度取出来
  SetLength(Dbyte, len);
  Move(m_pBin[8], Dbyte[0], len);
  Result:= Dbyte;
end;
----------------------------------------------
-
作者:
男 cuit_xiong (熊猫) ★☆☆☆☆ -
普通会员
2017/12/14 9:33:42
1楼: 为什么不设置啊,要设置的IsMultiThread := TRUE;
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2017/12/14 9:34:10
1楼: 给其他语言调用用什么tbytes?


function NewBuffer(const pInBuffer: PBYTE; const cchInBufSize: Integer; out pOutBuffer: PBYTE; var pcchOutBufSize: Integer): BOOL; stdcall;
begin
  if ((0 = cchInBufSize) or (nil = pInBuffer)) then
  begin
    pcchOutBufSize := cchInBufSize;
    Exit(FALSE);
  end
  else if (0 = pcchOutBufSize) then
    Exit(FALSE);

  pOutBuffer := malloc(pcchOutBufSize);
  if (nil = pOutBuffer) then
    Exit(FALSE);

  move(pInBufSize^, pOutBufSize^, pcchOutBufSize);
  Exit(TRUE);
end;
----------------------------------------------
--
作者:
男 ztcjn (哎哟喂) ▲▲▲△△ -
普通会员
2017/12/14 11:33:15
2楼:
cuit_xiong


加锁就不是多线程了
----------------------------------------------
-
作者:
男 ztcjn (哎哟喂) ▲▲▲△△ -
普通会员
2017/12/14 11:34:02
3楼:
bahamut8348


那用什么?我上面的函数是delphi内部用的,但是执行后崩溃
----------------------------------------------
-
作者:
男 ztcjn (哎哟喂) ▲▲▲△△ -
普通会员
2017/12/14 13:35:27
4楼: 没有大神知道么?
----------------------------------------------
-
作者:
男 testerhook (CaptainHook) ★☆☆☆☆ -
普通会员
2017/12/14 13:45:32
5楼: 给别的语言用,就用通用的数据类型。TBytes换成Byte指针,最好所有Byte都改成ansichar。
所有String类型都改成AnsiChar。
----------------------------------------------
-
作者:
男 ztcjn (哎哟喂) ▲▲▲△△ -
普通会员
2017/12/14 14:04:30
6楼:
testerhook


用byte多线程也崩溃  我试过只有用widestring 这个没问题

现在dll我定义的数据类型都是pansichar
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2017/12/14 17:55:40
7楼: 我写的函数本身是线程安全的。
只要你自己保证你传入的参数安全就没问题。

当然,可能会有错误。电脑上没有delphi环境。
大概就这么个意思,自己debug一下就可以了。
----------------------------------------------
--
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2017/12/14 21:32:29
8楼: 如果你用TByte即便是给其他的Delphi使用只要是DLL导出的函数,最好不要用TBytes这种生存期自管理的类型。否则会比较麻烦,需要ShareMEM这样的,或者DLL和EXE共享rtl.bpl。
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 ztcjn (哎哟喂) ▲▲▲△△ -
普通会员
2017/12/15 1:01:39
9楼:
wr960204


现在问题是可能共享不了内存  主程序不是delphi写的 没办法接管内存 所以比较麻烦 

另外请教下 不用tbytes用那种类型比较好???
----------------------------------------------
-
作者:
男 ztcjn (哎哟喂) ▲▲▲△△ -
普通会员
2017/12/15 1:02:03
10楼:
bahamut8348


好的  我先试试  有问题在请教
----------------------------------------------
-
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2017/12/15 13:00:17
11楼: 因为你上面说给DLL是给Delphi用的,所以让你那样用.如果是给其他语言的,也不要用TBytes,别的语言没有对应的类型.
可以仿照Windows的一些API的方式.
bahamut8348 的方式就是正确的
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 hsj (hsj) ★☆☆☆☆ -
盒子活跃会员
2017/12/15 13:21:04
12楼: inansipchar,inansipcharsize,outansipchar,outansipcharsize
做标准的,这些都是基础的
----------------------------------------------
qq:171833017,靖源软件http://www.dxmylove.com
作者:
男 hsj (hsj) ★☆☆☆☆ -
盒子活跃会员
2017/12/15 13:38:20
13楼: procedure GetMd5String(const pin: PAnsiChar; const pinsize: integer; pout: PAnsiChar; var poutsize: integer); stdcall;
这么写其他语言都可以用,可以到我站上看硬盘序列号获取的包,就是这么干的,别的语言都能调http://www.dxmylove.com/download/jyharddisk.zip
Delphi, C++Builder, C#, Visual C++, Visual Basic, Visual Basic.NET, PowerBuilder,fortran等
----------------------------------------------
qq:171833017,靖源软件http://www.dxmylove.com
作者:
男 kingofsun (小矮人酋长) ★☆☆☆☆ -
普通会员
2018/1/4 9:34:09
14楼: 用兼容的数据类型或者指针,不要用delphi独有的数据类型或者类作为参数
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行74.21875毫秒 RSS