*** 300大分求解如何把BC4.5编译得到的.lib和.dll 用在Win32程序中? *** 请Searph兄,tchaikov兄和edyang兄都来看看

silver 2000-12-20 05:12:00
我这里有一套鼠标取词的源码,9x版的一开始不知道怎么编译,后来得到Searph兄的帮助,(参见 http://www.csdn.net/expert/TopicView.asp?id=49520) 了解到需要用16位的编译器如BC4.5来编译,但是现在遇到一个问题就是我想在一个MFC程序里使用上述程序提供的取词功能,我把guiout.lib和guiout.dll和一个头文件包含到工程中编译的时候出现下面这个错误:
Linking...
.\guiout.lib : fatal error LNK1136: invalid or corrupt file

后来我考虑不使用.lib文件,直接用LoadLibrary、LoadLibraryEX来动态加载guiout.dll,但无论如何都不成功,仔细看了一下 guidll.c(编译生成guiout.dll的源文件),竟然连DllMain都没有,LoadLibrary不成功也不奇怪了,那现在不用LoadLibrary我该怎么用guiout.dll呢? 难道说在一个VC6.0编写的MFC程序中不能使用guiout.dll提供的取词功能吗?难道说金山词霸是用VC2.0或是BC4.0写的?我不信!谁能解决这个问题,这300分你受之无愧!!!

P.S.刚刚兑换了600分可用分,但不知为什么现在最多能给73分,待我问问zdg怎么回事,一定补全这300分~~~~`
...全文
460 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt642 2001-05-31
  • 打赏
  • 举报
回复
94009关注!
wang1st 2000-12-21
  • 打赏
  • 举报
回复
东西发给你了,希望对你有帮助。
wang1st 2000-12-21
  • 打赏
  • 举报
回复
1. 建立一个叫guihook16.c的文件,目标文件是guihook16.dll。拷贝hook16.c中全部用到的函数。我已经建立了guihook16.c,你将函数拷过来即可。
2. 建立guihook.thk文件,将guihook16.dll的导出函数在guihook.thk中定义。我已经打好框架,你把其余的实现即可。注意的是类型的定义,如果函数的参数中有指针的话要这样写:
BOOL ThunkIt(LPSTR lpstrInput, LPSTR lpstrInOut, LPSTR Output)
{
lpstrInput=input; //input is keyword
lpstrInOut=inout; //both in and out
lpstrOutput=output; //output is keyword 2
}
3. 使用thunk /t HOOK guihook.thk 注意大小写,生成guihook.asm文件。
4. 使用 ml /DIS_16 /c /W3 /nologo /Fo /guihook16.obj guihook.asm 生成guihook16.obj文件。
5. 使用 ml /DIS_32 /c /W3 /nologo /Fo /guihook32.obj guihook.asm 生成guihook32.obj文件。
6. 使用bc40,将guihook16.obj和guihook16.c联编,生成guihook.dll文件。去掉连接的大小写敏感,好象在工程中的link选项中。
7. 使用brc -V4.0 guihook16.dll 将guihook16.dll标明为子系统版本4.0。否则32位的dll不能调用。
8. 现在完成了16位的dll,接着处理32位的。
9. 建立一个dll project,叫guihook32,目标文件是guihook32.dll。在guihook32.c其实是应用程序和16位dll的接口。我已经帮你写好框架了,其余的自己实现。
10.用刚才把刚才编译好的guihook32.obj添加到project中,vc中在project setting中link页的object/library modules中添加guihook32.obj 和 thunk32.lib两个文件。
11.编译32位dll
12.在程序中调用32位dll
Searph 2000-12-21
  • 打赏
  • 举报
回复
SDK我也安了,没仔细找,如果是SDK的,我自己看看吧~~呵呵~~谢谢你~~至于帮助,都是分开的,你看看能否找到在哪个chm文件里面。
另:你在2000下装过SDK Apr 2000版么?我只能在98下装。
mjian 2000-12-21
  • 打赏
  • 举报
回复
To Searph:
我刚刚看到msdn中也有相关资料的,您可以键入thunk查查看。我想MSDN大家应该都有吧。
另外,SDK中的文档是不是只能用COPY的办法取出一部分?
Searph 2000-12-21
  • 打赏
  • 举报
回复
给我一份吧~谢谢~~:)
mjian 2000-12-21
  • 打赏
  • 举报
回复
需要用到win32 SDK编译环境,里面有Thunk.exe编译器,我有这方面的资料,您如需要,我可以给您。
先写一个thunk script,用thunk.exe编译出两个.obj文件,分别link到两个DLL中去。
silver 2000-12-21
  • 打赏
  • 举报
回复
BugKiller,mjian,wang1st 谢谢你们

特别感谢 Sharp Wang 兄!!!

等我给贴子加满300分,就给大家加分
ecore2 2000-12-20
  • 打赏
  • 举报
回复
有可能就是IHOOKS.dll里调用了那个16位的Dll.
在IHOOKS.dll里可能有判断当前系统是NT还是9x的代码,是9x的话,就Trunk到16位代码的dll上去.
我说的都是可能.
silver 2000-12-20
  • 打赏
  • 举报
回复
谢谢Searph的提示,还有人有办法吗?
BugKiller 2000-12-20
  • 打赏
  • 举报
回复
你好,我是小辉。

当LoadLibraryEX()不成功时,GetLastError()的值是多少?如果DLL不需要处理通知消息,没有DllMain()是正常的。

凭猜测看不出问题所在。你把编译好后的头文件及dll, lib及应用工程打包寄给我,我帮你试试看。地址: XiaoHui@ChinaITHero.com

不过我这几天开发正忙,不能保证很快给你解决或答案。

===========================================
小辉程序员之路 http://www.ChinaITHero.com
Searph 2000-12-20
  • 打赏
  • 举报
回复
不是DllMain的事情,就算有,也是LibMain,那是16bits DLL,ne格式,我不知道win32程序是否能调用16位的DLL,以前试过,都没有成功,词霸是用win32编译器写,我查了一下词霸2001,只有一个dll是16bits的,但还找不到是哪儿调用它的,提供的接口也不像是hook,或许是用别的方法实现取词的,它的IHOOKS.dll和ITEXTOUT.dll都是32bits的。
我有时间再试试,水平有限,希望各位也都帮一下。
silver 2000-12-20
  • 打赏
  • 举报
回复
老是听说 thunk 、thunk 的,到底什么是thunk?
Searph 2000-12-20
  • 打赏
  • 举报
回复
具体做法我不知道,只是在win9x下,系统32bits dll都是通过thunk层调用下层16bits dll的,我也希望能了解其机制和具体做法。
Edward 2000-12-20
  • 打赏
  • 举报
回复
不懂!原先有人给我解释过,开始听懂了,但现在忘了又不懂了 :-(
silver 2000-12-20
  • 打赏
  • 举报
回复
哪里有更多这方面的资料呢?
mjian 2000-12-20
  • 打赏
  • 举报
回复
要自己再写两个DLL,一个是16位侧,一个是32位侧的,您的32位应用程序调用32位DLL,通过32-16 thunk来调用16位DLL。
mjian 2000-12-20
  • 打赏
  • 举报
回复
我想也许我能给您一点建议。
如果想在Win32中调用16位DLL,需要用到thunk技术。
以下是MSDN里的资料,您可以看:
As a developer, you may need to access the functionality provided by a 16- bit dynamic-link library (DLL) from your Win32 application. This is true particularly when you do not have the source code for the DLL so that you can port it to Win32. This article discusses the mechanism by which 32-bit DLLs can call 16-bit DLLs. The mechanism is called a thunk and the method implemented under Windows 95 is called a flat thunk.



silver 2000-12-20
  • 打赏
  • 举报
回复
不是真的吧(真希望不是)?这样一来,那个guiout.dll就是没法用了…… :(
Searph 2000-12-20
  • 打赏
  • 举报
回复
试了一下,把那个16bits dll删了,对词霸没任何影响,看来取词是真的没有用16bits dll.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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