DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: snarv12
今日帖子: 1
在线用户: 14
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 whsky (板凳上的钉子) ★☆☆☆☆ -
普通会员
2008/5/3 9:58:37
标题:
请问delphi的窗口句柄类型是什么 浏览:1899
加入我的收藏
楼主: 我现在要调用VC++写的DLL,函数在VC++中的定义为
extern "C" __declspec(dllexport) bool StartCom(CWnd *MainDlg);

那么我在DELPHI中调用应该如何声明,谢谢
----------------------------------------------
我是带着问题来的
作者:
男 whsky (板凳上的钉子) ★☆☆☆☆ -
普通会员
2008/5/3 10:29:40
1楼: 不会没人知道吧
----------------------------------------------
我是带着问题来的
作者:
女 xiaopei (忘忧草) ★☆☆☆☆ -
盒子活跃会员
2008/5/3 10:46:22
2楼: Delphi的VCL类库和VC的MFC类库根本是两个不同的类型,你上面的VC函数Delphi没办法调用(就算可以,好像工作量也很大,至少我是没办法:P)。
----------------------------------------------
按此在新窗口浏览图片
作者:
男 donghaixiaoxiao (东海小小) ★☆☆☆☆ -
盒子活跃会员
2008/5/3 11:00:36
3楼: extern "C" __declspec(dllexport) bool StartCom(CWnd *MainDlg);

-->delphi:

function StartCom(Awnd:Handle): Boolean; cdecl;
or
function StartCom(Awnd:Integer): Boolean;  cdecl;

or 

function StartCom(Awnd:HWND): Boolean;  cdecl;
----------------------------------------------
-
作者:
男 whsky (板凳上的钉子) ★☆☆☆☆ -
普通会员
2008/5/3 11:01:38
3楼: 调用可以,只是不知道这个窗口句柄在DELPHI应该是什么样的
----------------------------------------------
我是带着问题来的
作者:
男 whsky (板凳上的钉子) ★☆☆☆☆ -
普通会员
2008/5/3 11:14:50
4楼: donghaixiaoxiao 谢谢你,非常感谢
----------------------------------------------
我是带着问题来的
作者:
男 donghaixiaoxiao (东海小小) ★☆☆☆☆ -
盒子活跃会员
2008/5/3 11:17:58
4楼: 其实句柄在VC里只是一个 Dword,你在VC里看看CWnd的原型,可能就是CWnd=Dword,
所以在Delphi里,也是这么声明的:
HWND = type LongWord;
THandle = LongWord;

我上面用
function StartCom(Awnd:Integer): Boolean;  cdecl;其实不严谨,其实用
longword最好。

不过既然Delphi里定义有Hwnd,或者Thandle那么就这么用就可以了,反正都是longword,
至于为什么,那就是不为什么了,其实只是两种不同编译器之间类型定义的不同转换

Delphi的窗口句柄最好用Thandle。 更符合delphi习惯
----------------------------------------------
-
作者:
女 xiaopei (忘忧草) ★☆☆☆☆ -
盒子活跃会员
2008/5/3 11:47:46
5楼: CWnd不是窗口句柄啊,是MFC类的CWnd类指针,HWND才是窗口句柄。而Delphi不支持MFC类,没办法构造一个MFC类指针给这个函数,所以Delphi才没办法调用啊。如果CWnd是窗口句柄就好办了,在Delphi直接用THandle类型就行了。
----------------------------------------------
按此在新窗口浏览图片
作者:
女 xiaopei (忘忧草) ★☆☆☆☆ -
盒子活跃会员
2008/5/3 12:02:17
6楼: CWnd是MFC的类对象,"CWnd *MainDlg"的参数意思就和Delphi的"MainDlg:TForm"参数是一样的,只是CWnd和TForm的内部结构位置是不一样的,不兼容的,所以我才说Delphi没办法“正确”调用这个函数,因为Delphi不支持MFC类库对象,如果你真的要在Delphi中调用这个函数,那就必须在Delphi中构造一个和VC的MFC类库一样的CWnd类才行,不过那个工作量太大了。
----------------------------------------------
按此在新窗口浏览图片
作者:
男 whsky (板凳上的钉子) ★☆☆☆☆ -
普通会员
2008/5/3 12:05:10
6楼: 那应该怎么做,总该有办法的,还请多多指教,再复杂也行,只要能实现
----------------------------------------------
我是带着问题来的
作者:
男 whsky (板凳上的钉子) ★☆☆☆☆ -
普通会员
2008/5/3 12:08:57
7楼: 按此在新窗口浏览图片 天啦,这个也太......
----------------------------------------------
我是带着问题来的
作者:
女 xiaopei (忘忧草) ★☆☆☆☆ -
盒子活跃会员
2008/5/3 12:16:29
8楼: 不过,如果你懂你VC的话,你只需重新写出一个Dll,在VC的Dll中调用这个函数,并将这个函数再输出让Delphi调用就行了,只是有一点不好,就是必须在VC的Dll中初始化CWnd类参数,无法在Delphi初始化这个参数。
----------------------------------------------
按此在新窗口浏览图片
作者:
男 plainzw (readworld) ★☆☆☆☆ -
盒子活跃会员
2008/5/3 16:30:10
9楼: 如果有时间和精力的话,可以把CWnd及其基类用到的头文件afx.h,afxwin.h由C++代码转换成Pascal代码,再进行调用.
----------------------------------------------
-
作者:
男 ruralboy (青瓜白菜番茄红) ★☆☆☆☆ -
盒子活跃会员
2008/5/3 16:42:11
10楼: faint
----------------------------------------------
作者:
男 mycatboys (mycatboys) ★☆☆☆☆ -
普通会员
2008/5/3 20:03:23
11楼: 好贴啊 不错啊 谢谢楼主分享 拉 (*^__^*) 嘻嘻……         
   
     
       
    
    
  
     
   
      
----------
客户:你们三角洲里的盟军2玩不了!申请虚拟主机客服:??!!请问是什么盘? 客户:藏经阁。域名注册客服:555~
----------------------------------------------
-
作者:
男 whsky (板凳上的钉子) ★☆☆☆☆ -
普通会员
2008/5/3 20:55:33
12楼: 非常感谢各位,看来我只有先用XIAOPEI的办法实现下了,有好结果,随时与各位分享
----------------------------------------------
我是带着问题来的
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS