| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 988 人关注过本帖
标题:DLL调用 讨论
取消只看楼主 加入收藏
贺国全
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-31
收藏
 问题点数:0 回复次数:3 
DLL调用 讨论
电力科学研究院,给我们公司软件外包, 他们给我们一个9个接口函数, 这几个接口函数全部用DLL封装了,(资料见接口附件)
我用vc6.0   打开DLL文件区访问他们的函数,代码如下:
我建立了一个mfc工程,我在界面上添加了一个按钮,按钮的按下出发事件中的代码,进行加载DLL文件
程序代码:
void CRegularDllCallDlg::OnButton1() 
{
    char aData[10];
    char bData[10];
    int i;
    // TODO: Add your control notification handler code here
    typedef char (*lpFun2)(char * ,char*);
    
    HINSTANCE hDll;   //DLL句柄    
    hDll = LoadLibrary("TestZhuzhan.dll");
    if (NULL==hDll)
    {
        MessageBox("TestZhuzhan.dll加载失败");
        return;
    }

    //lpFun2 addFun;  //函数指针
    lpFun2 pShowDlg = (lpFun2)GetProcAddress(hDll,"IdentityAuthentication");
    if (NULL==pShowDlg)
    {
        MessageBox("DLL中函数寻找失败");    
        return ;
	
		
			
电科院给我的接口.rar (959.52 KB)
} for(i=0;i<7;i++) { aData[i]=0; } aData[7]=1; i=pShowDlg(&aData[0],&bData[0]); //IdentityAuthentication() MessageBox("DLL中函数寻找成功"); }

,结果,我一按按钮,没有弹出消息框提示DLL中函数寻找成功,而是出来一个这样的东西(见附件)
搜索更多相关主题的帖子: DLL 
2010-01-31 17:07
贺国全
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-31
收藏
得分:0 
问题解决了, 方法如下:,但是不知道为什么
    HMODULE hModule=::LoadLibrary("TestZhuzhan.dll");
    typedef int (_stdcall *Authentication)(char *div,char *data);
    char div[17];
    char OutData[256];
    char MiWen[16];
    char SuiJiShu[16];

    memcpy(div,"0000000000000001",16);
    div[16]=0x00;
    memset(OutData,0x00,256);
    memset(MiWen,0x00,16);
    memset(SuiJiShu,0x00,16);
 
    Authentication p;
    p=(Authentication)::GetProcAddress(hModule,"IdentityAuthentication");
    int n=p(div,OutData);
    if(n!=0)
    {
        MessageBox("身份认证失败");
        return ;
    }

    m_EditStr_Pear=CString(OutData);
   
    //m_EditStr_Money=CString(sizeof(OutData))  ;
    UpdateData(FALSE);
    UpdateData(TRUE);

    CString str;
    str.Format("OutData[0]:%d,OutData[1]:%d,GetLength():%d,sizeof(char):%d,sizeof(short):%d;",OutData[0],OutData[1],GetLength(OutData),sizeof(char),sizeof(short) );
    MessageBox(str);
2010-02-03 09:19
贺国全
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-31
收藏
得分:0 
顺便再提个问题:
上面的代码中GetLength的函数定义如下
程序代码:
int GetLength(char* pData)
{
    int i;
    i=0;
    while(*pData!=0){
           pData++;
           i++;    
    }
    return i;
}

为什么GetLength返回的值为32,应该是16的呀:
执行结果 见附件的 截图
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-02-03 09:23
贺国全
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-31
收藏
得分:0 
发现2段比较有意思的代码,大家一起分享下
//*************************[ General Library ]**********************
void * malloc(unsigned nbyte)
//Very simple; Use malloc() & free() like Stack
//void *mallocPt=Image$$RW$$Limit;
{
    void *returnPt = mallocPt;

    mallocPt = (int *)mallocPt+nbyte/4+((nbyte%4)>0); //To align 4byte

    if( (int)mallocPt > HEAPEND )
    {
        mallocPt = returnPt;
        return NULL;
    }
    return returnPt;
}

//-------------------------------------------------------------------
void free(void *pt)
{
    mallocPt = pt;
}
2010-02-05 16:46
快速回复:DLL调用 讨论
数据加载中...
 
   



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

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