| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1942 人关注过本帖
标题:C调用VC++6.0封装的DLL
取消只看楼主 加入收藏
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:9 
C调用VC++6.0封装的DLL
VC++6.0做的BAC.dll,现在要在C中调用
1、C中应该怎样调用dll?

2、dll函数声明(部分)如下:
#define IMPORT_TYPE extern "C" _declspec(dllimport)

//已知压力(MPa),求对应饱和温度(℃)
IMPORT_TYPE void _stdcall P2T97(double P,double & T,int & Range);
//已知压力(MPa),求对应饱和水比焓(kJ/kg)
IMPORT_TYPE void _stdcall P2HL97(double P,double & H,int & Range);
怎样调用DLL中的函数?
我给定一个压力P,希望求出温度T。
搜索更多相关主题的帖子: double 
2017-03-03 15:30
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
首先非常感谢rjsp版主。
我只有一个dll文件和相关的函数说明哦,没有lib文件。DLL文件是用VC++6.0封装的,现在在C里调用。
代码编译还有很多错误哦,会是什么问题?
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-03-03 17:40
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
以下是引用wp231957在2017-3-3 19:09:44的发言:

能把DLL发上来吗

BAC.rar (92.82 KB)
2017-03-04 08:44
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
以下是引用吹水佬在2017-3-3 20:49:10的发言:

只有dll,可用LoadLibrary和GetProcAddress动态调用。

你好,能不能具体说说,对C不熟悉。有没有相关的例程(通过测试的)供参考?
2017-03-04 08:46
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
以下是引用wp231957在2017-3-4 08:54:48的发言:

无法下载呢


你再看一下能不能下载,或者方便的话留个邮箱,我发给你也可以。
BAC.rar (92.82 KB)
  
2017-03-04 09:12
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
以下是引用wp231957在2017-3-4 09:19:36的发言:

wp231957@    另: 还是无法下载

 邮件已发,请查收,帮忙把把脉,谢谢!
2017-03-04 10:23
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
以下是引用吹水佬在2017-3-4 11:46:31的发言:

BAC.dll无P2T97和P2HL97函数
P2xxx部分函数只有:
文件名: C:\TEMP\BAC.dll
原始文件名:UEwasp.dll
------------------------------------------------
序号       虚拟地址  函数名
------------------------------------------------
0000001C  000012B0  P2CPG
0000001D  00001260  P2CPL
0000001E  00001350  P2CVG
0000001F  00001300  P2CVL
00000020  000013F0  P2EG
00000021  000013A0  P2EL
00000022  00001850  P2EPSG
00000023  00001800  P2EPSL
00000024  000015D0  P2ETAG
00000025  00001580  P2ETAL
00000026  00001990  P2G
00000027  000010D0  P2HG
00000028  00001080  P2HL
00000029  00001530  P2KSG
0000002A  000014E0  P2KSL
0000002B  00001920  P2L
0000002C  000018E0  P2NG
0000002D  000018A0  P2NL
0000002E  000017B0  P2PRNG
0000002F  00001760  P2PRNL
00000030  00001710  P2RAMDG
00000031  000016C0  P2RAMDL
00000032  00001170  P2SG
00000033  00001120  P2SL
00000034  00001490  P2SSPG
00000035  00001440  P2SSPL
00000036  00001030  P2T
00000037  00001670  P2UG
00000038  00001620  P2UL
00000039  00001210  P2VG
0000003A  000011C0  P2VL

就用P2HL当作P2HL97函数说说:
#include <stdio.h>
#include <windows.h>

typedef void WINAPI (*P2HL)(double, double*, int*);

main()
{
    HMODULE hLib;
    hLib = LoadLibrary("BAC.dll");
    if (hLib != 0)
    {
        P2HL p2hl = (P2HL)GetProcAddress(hLib, "P2HL");
        if (p2hl != 0)
        {
            double P=0, H=0;    //假设=0
            int Range=0;
            p2hl(P, &H, &Range);
            printf("%lf %d\n", H, Range);
        }
        FreeLibrary(hLib);
    }
}

谢谢!
是的,我发的那个是经过别人修改的。UEwasp.dll是原版,第三方提供的开源软件。
2017-03-04 11:57
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
以下是引用吹水佬在2017-3-4 11:46:31的发言:

BAC.dll无P2T97和P2HL97函数
P2xxx部分函数只有:
文件名: C:\TEMP\BAC.dll
原始文件名:UEwasp.dll
------------------------------------------------
序号       虚拟地址  函数名
------------------------------------------------
0000001C  000012B0  P2CPG
0000001D  00001260  P2CPL
0000001E  00001350  P2CVG
0000001F  00001300  P2CVL
00000020  000013F0  P2EG
00000021  000013A0  P2EL
00000022  00001850  P2EPSG
00000023  00001800  P2EPSL
00000024  000015D0  P2ETAG
00000025  00001580  P2ETAL
00000026  00001990  P2G
00000027  000010D0  P2HG
00000028  00001080  P2HL
00000029  00001530  P2KSG
0000002A  000014E0  P2KSL
0000002B  00001920  P2L
0000002C  000018E0  P2NG
0000002D  000018A0  P2NL
0000002E  000017B0  P2PRNG
0000002F  00001760  P2PRNL
00000030  00001710  P2RAMDG
00000031  000016C0  P2RAMDL
00000032  00001170  P2SG
00000033  00001120  P2SL
00000034  00001490  P2SSPG
00000035  00001440  P2SSPL
00000036  00001030  P2T
00000037  00001670  P2UG
00000038  00001620  P2UL
00000039  00001210  P2VG
0000003A  000011C0  P2VL

就用P2HL当作P2HL97函数说说:
#include <stdio.h>
#include <windows.h>

typedef void WINAPI (*P2HL)(double, double*, int*);

main()
{
    HMODULE hLib;
    hLib = LoadLibrary("BAC.dll");
    if (hLib != 0)
    {
        P2HL p2hl = (P2HL)GetProcAddress(hLib, "P2HL");
        if (p2hl != 0)
        {
            double P=0, H=0;    //假设=0
            int Range=0;
            p2hl(P, &H, &Range);
            printf("%lf %d\n", H, Range);
        }
        FreeLibrary(hLib);
    }
}

P是我要给定的已知值,H是计算结果,要返回给我的,
Range是一个调用成功与否得标志!
Range=0 表示输入的参数超限,不可能有对应的值!
Range=其它值,表示输入参数对应的状态点所处的区域。
2017-03-04 12:45
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
以下是引用吹水佬在2017-3-4 11:46:31的发言:

BAC.dll无P2T97和P2HL97函数
P2xxx部分函数只有:
文件名: C:\TEMP\BAC.dll
原始文件名:UEwasp.dll
------------------------------------------------
序号       虚拟地址  函数名
------------------------------------------------
0000001C  000012B0  P2CPG
0000001D  00001260  P2CPL
0000001E  00001350  P2CVG
0000001F  00001300  P2CVL
00000020  000013F0  P2EG
00000021  000013A0  P2EL
00000022  00001850  P2EPSG
00000023  00001800  P2EPSL
00000024  000015D0  P2ETAG
00000025  00001580  P2ETAL
00000026  00001990  P2G
00000027  000010D0  P2HG
00000028  00001080  P2HL
00000029  00001530  P2KSG
0000002A  000014E0  P2KSL
0000002B  00001920  P2L
0000002C  000018E0  P2NG
0000002D  000018A0  P2NL
0000002E  000017B0  P2PRNG
0000002F  00001760  P2PRNL
00000030  00001710  P2RAMDG
00000031  000016C0  P2RAMDL
00000032  00001170  P2SG
00000033  00001120  P2SL
00000034  00001490  P2SSPG
00000035  00001440  P2SSPL
00000036  00001030  P2T
00000037  00001670  P2UG
00000038  00001620  P2UL
00000039  00001210  P2VG
0000003A  000011C0  P2VL

就用P2HL当作P2HL97函数说说:
#include <stdio.h>
#include <windows.h>

typedef void WINAPI (*P2HL)(double, double*, int*);

main()
{
    HMODULE hLib;
    hLib = LoadLibrary("BAC.dll");
    if (hLib != 0)
    {
        P2HL p2hl = (P2HL)GetProcAddress(hLib, "P2HL");
        if (p2hl != 0)
        {
            double P=0, H=0;    //假设=0
            int Range=0;
            p2hl(P, &H, &Range);
            printf("%lf %d\n", H, Range);
        }
        FreeLibrary(hLib);
    }
}

hLib是不是应该是hDLL?
2017-03-04 22:30
Apollo_c
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2017-3-3
收藏
得分:0 
以下是引用吹水佬在2017-3-4 11:46:31的发言:

BAC.dll无P2T97和P2HL97函数
P2xxx部分函数只有:
文件名: C:\TEMP\BAC.dll
原始文件名:UEwasp.dll
------------------------------------------------
序号       虚拟地址  函数名
------------------------------------------------
0000001C  000012B0  P2CPG
0000001D  00001260  P2CPL
0000001E  00001350  P2CVG
0000001F  00001300  P2CVL
00000020  000013F0  P2EG
00000021  000013A0  P2EL
00000022  00001850  P2EPSG
00000023  00001800  P2EPSL
00000024  000015D0  P2ETAG
00000025  00001580  P2ETAL
00000026  00001990  P2G
00000027  000010D0  P2HG
00000028  00001080  P2HL
00000029  00001530  P2KSG
0000002A  000014E0  P2KSL
0000002B  00001920  P2L
0000002C  000018E0  P2NG
0000002D  000018A0  P2NL
0000002E  000017B0  P2PRNG
0000002F  00001760  P2PRNL
00000030  00001710  P2RAMDG
00000031  000016C0  P2RAMDL
00000032  00001170  P2SG
00000033  00001120  P2SL
00000034  00001490  P2SSPG
00000035  00001440  P2SSPL
00000036  00001030  P2T
00000037  00001670  P2UG
00000038  00001620  P2UL
00000039  00001210  P2VG
0000003A  000011C0  P2VL

就用P2HL当作P2HL97函数说说:
#include <stdio.h>
#include <windows.h>

typedef void WINAPI (*P2HL)(double, double*, int*);

main()
{
    HMODULE hLib;
    hLib = LoadLibrary("BAC.dll");
    if (hLib != 0)
    {
        P2HL p2hl = (P2HL)GetProcAddress(hLib, "P2HL");
        if (p2hl != 0)
        {
            double P=0, H=0;    //假设=0
            int Range=0;
            p2hl(P, &H, &Range);
            printf("%lf %d\n", H, Range);
        }
        FreeLibrary(hLib);
    }
}

hLib是不是应该是hDLL?
2017-03-04 23:21
快速回复:C调用VC++6.0封装的DLL
数据加载中...
 
   



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

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