| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 995 人关注过本帖
标题:谁帮我翻译一下,谢谢
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:11 
谁帮我翻译一下,谢谢
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 翻译 
2012-12-09 22:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
3楼,你说的我知道,只是我想知道那些英文到底说了什么  我看看 从哪方面着手修改

DO IT YOURSELF !
2012-12-09 22:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <windows.h>
int i=0;
extern "C" _declspec(dllexport) void dec2yyy(int yyy,int source,char* bin)
{
    if(source==0) return;
    dec2yyy(yyy,source/yyy,bin);
    if((source%yyy)<10) bin[i]=(char)(source%yyy+0x30);
    else bin[i]=(char)(source%yyy+0x37);
    i++;
}


BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call,LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
        {
            // 

        }
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
我就是这么调用的 这是dll中的

DO IT YOURSELF !
2012-12-09 22:15
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<windows.h>

int main()
{
    HINSTANCE hDllInst = LoadLibrary("dlltest.DLL");
    typedef void (WINAPI *MYFUNC)(int,int,char*);
    MYFUNC mydec2yyy = NULL;
    mydec2yyy = (MYFUNC)GetProcAddress(hDllInst,"dec2yyy");
    char s[20];
    for(int i=0;i<20;i++) s[i]='\0';
    mydec2yyy(16,258,s);
    printf("%s\n",s);
    FreeLibrary(hDllInst);
    return 0;
}
这是调用者函数

DO IT YOURSELF !
2012-12-09 22:15
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
DLL中不能使用全局变量吗
8楼说的比较详细了
又学习了一下

DO IT YOURSELF !
2012-12-09 22:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
一共申请了20个char  怎么会过大呢

DO IT YOURSELF !
2012-12-09 22:35
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2012-12-9 22:37:31的发言:

typedef void (WINAPI *MYFUNC)(int,int,char*);
吧这个改成typedef void (*MYFUNC)(int,int,char*);看看

如果这样好了就是调用规范的问题


“一共申请了20个char  怎么会过大呢” 你还不明白堆栈破坏的原理啊,如果是堆栈破坏,就是说你申请哦20个char 但是你往里面写入了 大于20个char的数据,这就是说写入的内存过大导致堆栈破坏,并不是说你申请了很大的内存~~
还真是如此
手懒了,当时想把winapi去掉 测试一下的
但是想当然的认为 和winapi无关  实际上貌似winapi 就是执行了stdcall吧

DO IT YOURSELF !
2012-12-09 22:39
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2012-12-9 22:37:31的发言:

typedef void (WINAPI *MYFUNC)(int,int,char*);
吧这个改成typedef void (*MYFUNC)(int,int,char*);看看

如果这样好了就是调用规范的问题


“一共申请了20个char  怎么会过大呢” 你还不明白堆栈破坏的原理啊,如果是堆栈破坏,就是说你申请哦20个char 但是你往里面写入了 大于20个char的数据,这就是说写入的内存过大导致堆栈破坏,并不是说你申请了很大的内存~~
258转换成16进制就是102 远远小于20呢

DO IT YOURSELF !
2012-12-09 22:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
网上抄的代码害人啊

 typedef void (WINAPI *MYFUNC)(int,int,char*);
    MYFUNC mydec2yyy = NULL;
    mydec2yyy = (MYFUNC)GetProcAddress(hDllInst,"dec2yyy");

其实到现在  粉色的代码的具体含义 我仍然是似似而非

DO IT YOURSELF !
2012-12-09 22:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2012-12-9 22:44:59的发言:

是这个问题就好,不过楼主知道调用规范不统一为什么就会出现这个问题吗?如果不知道,建议学习下~~~如果你从事it行业不会没有好处的
哈哈,我都奔4的人了,估计不会改行从事挨踢

另:调用规范不一致的主要原因不就是函数的形参入栈顺序不一样吗

DO IT YOURSELF !
2012-12-09 22:51
快速回复:谁帮我翻译一下,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028123 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved