| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1315 人关注过本帖
标题:dll调用dll问题2
只看楼主 加入收藏
yalewang
Rank: 2
等 级:论坛游民
帖 子:125
专家分:35
注 册:2010-4-15
结帖率:94.74%
收藏
已结贴  问题点数:80 回复次数:13 
dll调用dll问题2
兄弟外行愚钝,前几天问了此类问题仍不得其解,也网上搜索了,自己比着复制、黏贴,总是编译通不过,望能详细赐教。

两个dll,都是win32编写的,
      dll1位于d:dll1目录下,dll2位于e:dll2目录下,
其中dll1输出in1(int x),out1()函数;
    dll2输出in2(int x),out2()函数;
希望:
  不改变目录位置全路径动态调用,dll2调用dll1;
  in2()的值传给in1(); out1的值out2();

帮我写一下好不好?谢谢
搜索更多相关主题的帖子: 目录 动态 
2012-09-10 10:48
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这……在这个区问不合适,我给你挪挪地方吧。
2012-09-10 23:08
眼底星空
Rank: 4
等 级:业余侠客
威 望:3
帖 子:85
专家分:289
注 册:2006-9-2
收藏
得分:80 
    用函数指针吧。
   
    HINSTANCE hDll1 = NULL;
    HINSTANCE hDll2 = NULL;

    int (WINAPI * pIn1)(int) = NULL;
    int (WINAPI * pIn2)(int) = NULL;

    hDll1 = LoadLibrary("d:\\dll1\\dll1.dll");
    if(NULL == hDll1)
        return;

    hDll2 = LoadLibrary("d:\\dll2\\dll2.dll");
    if(NULL == hDll2)
        return;

    pIn1 = (int (WINAPI *)(int))GetProcAddress(hDll1,"in1");
    ASSERT(pIn1);

    pIn2 = (int (WINAPI *)(int))GetProcAddress(hDll2,"in2");
    ASSERT(pIn2);

    //如果要实现in2()的值传给in1(),可以如下写:
    int nVal = 3;
    int nRtn = pIn1(pIn2(nVal));

    //out1的值out2(),没懂楼主什么意思。

    FreeLibrary(hDll1);
    FreeLibrary(hDll2);



[ 本帖最后由 眼底星空 于 2012-9-11 11:08 编辑 ]

无为而为 && 每天进步一小点...
2012-09-11 11:03
yalewang
Rank: 2
等 级:论坛游民
帖 子:125
专家分:35
注 册:2010-4-15
收藏
得分:0 
多谢回复,我是想用这个例子练习一下DLL调用DLL,不是APP调用,out1赋值给out2是想,两个dll各有两只手,互换手中的东西
2012-09-12 10:03
眼底星空
Rank: 4
等 级:业余侠客
威 望:3
帖 子:85
专家分:289
注 册:2006-9-2
收藏
得分:0 
回复 4楼 yalewang
        还是不甚明白你的赋值是什么意思,out1函数没有参数也没有返回值。

        我的理解:你是想在dll1中调用dll2的in2函数? 又在dll2中调用dll1的out1函数?
        不知道是不是这意思。两个dll存在相互依赖,这种模块设计是不太合理的,一般很少见。

        不过我好像看过可以使编译通过的方法:
        先把dll1中调用dll2的部分屏蔽掉,编译出dll1;然后dll2链接dll1,编译出dll2;最后把dll1中代码恢复,链接dll2,重新再编译出dll1。
        这个我没有试过,你可以试一试。

无为而为 && 每天进步一小点...
2012-09-12 13:51
yalewang
Rank: 2
等 级:论坛游民
帖 子:125
专家分:35
注 册:2010-4-15
收藏
得分:0 
谢谢,我试了好多次,编译通不过,希望能给个完整的CPP
我把问题调整一下这样叙述,可能好理解些

有三个DLL,DLL1 在 E:\DLL1 目录,DLL2在D:\DLL2, DLL3在D:\DLL3目录下,
 DLL2 和 DLL3 都调用 DLL1 ;

DLL1 输出函数 int in1(int x) 和 int out1(int x);

DLL2 输出函数 int in2(int x) 和 int out2(int x),
                         从DLL1输入函数in1()和out1() ;
DLL3 输出函数 int in3(int x) 和 int out3(int x),
                         从DLL1输入函数in1()和 out1() ;

DLL都是用win32写的
2012-09-15 13:55
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
ding~~~
2012-09-16 00:10
yalewang
Rank: 2
等 级:论坛游民
帖 子:125
专家分:35
注 册:2010-4-15
收藏
得分:0 
在win32 console 和MFC dll 中都调试出现这种错误,
error C2501: 'hinstance' : missing storage-class or type specifiers
2012-09-17 10:08
yalewang
Rank: 2
等 级:论坛游民
帖 子:125
专家分:35
注 册:2010-4-15
收藏
得分:0 
我在等啊,谁帮一下?
2012-09-17 11:39
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
还没解决吗
2012-09-17 12:42
快速回复:dll调用dll问题2
数据加载中...
 
   



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

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