作者UNARYvvv (有趣生活)
看板C_and_CPP
标题Re: [问题] 如果手上有一堆.dll,也知道function的ꬠ…
时间Tue Sep 5 17:33:48 2006
※ 引述《maxi326 (不想再留白)》之铭言:
: 对dll认识不多
: 在用vc6写程式
: 从网路上下载到一些dll
: 他说可以应用在自己写的vc程式上
: 有个说明档但都只有简单的宣告
: eg.VARIANT_BOOL Connect_Net([in] BSTR IPAdd, [in] LONG Port)
: 我知这是vb的宣告方式
vb ??
那宣告看来应该还是比较像 C 吧
只是那个 [in] 应该是为了说明,表示是要传入资讯的参数
(不过 VARIANT_BOOL 和 BSTR 也是 COM programming 常用的资料型态就是了)
: 但他应该是win32 api一样大家都通用
这个就不是称作 win32 API 了
这只是别人写的 DLL 所 export 出来的函式
: 那些dll都经compile过,没办法看
: 我要怎样才可以用到这些function呢?
: 是这样用吗?
: extern "C" __declspec(dllimport) Connect_Net(BSTR IPAdd, LONG Port);
: 但build的时候会有问题
: conn.obj : error LNK2001: unresolved external symbol __imp__Connect_Net
: Debug/try_zk_conn.exe : fatal error LNK1120: 1 unresolved externals
你说没 .lib 档案,那用这样 import 方式就不行了
有装 VC 的话找一下它的安装目录,有个 dumpbin.exe 的命令列工具
找到之後执行 "dumpbin dll档案名称 /exports"
看一下实际上 Connect_Net 被 DLL 所汇出 (export) 的名称到底是什麽
有了确切的名称之後
就用 LoadLibrary 在执行时动态载入 DLL 档案
然後 GetProcAddress 取出函式位址,存到一个函式指标
之後就用该函式指标来呼叫那功能..
顺便要注意那个函式是 __cdecl 还是 __stdcall,找一下文件
(我是猜後者机率较大啦..)
有时候从 DLL 的函式汇出名称也看得出来
你先用 dumpbin 看一下吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.210.68
1F:推 maxi326:嗯,谢谢你,刚刚找一下google看到类似的东西,但网上的说得 09/05 17:53
2F:→ maxi326:不够清楚,谢谢你的说明,我再试一下 09/05 17:54