在C++builder中用伪造的dll生成的lib文件可正常调用vc写的dll

    引子:“在C++builder6中动态调用的方法,(静态的调用试验没成功,主要是用implib没法生成正确的Pinyin.lib,内容缺文件名,一启动就报找不到文件,不知道谁可以帮忙解决这个问题)”。

    在做《在delphi 7中实现获取汉字拼音首字母》时,顺便试着写C++builder 6的调用例子,可惜当时静态调用没成功,带中文路径的implib生成的lib文件竟然和在根目录下生产成的lib文件内容不一样(用UltraEdit看就知道了),如:"implib E:/拼音首字母/Pinyin.lib E:/拼音首字母/Pinyin.dll" 和 "implib F:/Pinyin.lib F:/Pinyin.dll" 生成的Pinyin.lib就不一样。前者编译通过,运行时,报找不到"E CORPORATION         .dll",然后访问地址出错;后者直接编译不过,报连接错误"[Linker Error] Unresolved external 'GetPinYinLeader' referenced from E:/拼音首字母/UNIT1.OBJ "。

      试过其他各种方法生成lib,包括直接修改二进制文件,都没成功。最后想到以前有个帖子说可以伪造一个有空方法体的dll,生成的lib可直接调用vc生成的dll。

    原话是这样的:“lib可以造假的,比如vc dll有一个函数 你用bcb写一个dll也有同样的函数,实现是空的,然后编译出来
其他使用dll的工程链接lib中这个lib,dll则还是用VC的dll”

     参考地址:http://topic.youkuaiyun.com/u/20090302/17/99d1fbc5-4be6-4744-96d9-09b16c0d93c3.html

 

这个拼音库的帮助参考文字是这样的:

----------------------------------------------------------------------------

本DLL只有两个函数,函数原型如下:

    //获得拼音
    //参数依次为: 拼音缓存区,要转换的字符,分隔符
    BOOL WINAPI GetPinYin(PCHAR pBuf,PCHAR pStr,PCHAR pSeparator)

    //获得拼音首字母
    //参数依次为: 拼音缓存区,要转换的字符
    BOOL WINAPI GetPinYinLeader(PCHAR pBuf,PCHAR pStr)

-------------------------------------------------------------------------------------

 

 

下面是伪造dll的代码:

   

 

静态调用代码:

 

经过测试,结论:是可以这样做的,得出的结果跟动态调用一样。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值