请问怎样调用DLL,LIB文件啊???

karonbf 2004-05-09 05:40:24
老师给了个用VC5.0写的.DLL,.LIB,.H和.BAS文件我,请问怎样在VC.NET或者VB.NET上调用啊~~~~~
...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcforever 2004-05-09
  • 打赏
  • 举报
回复
1、隐式调用的方法
将你的dll的头文件包含到主程序中#include "XXX.h"
然后再将该DLL在编译时生成的.lib文件包含到工程中,在主程序中添加#pragma comment(lib,XXX.lib)
然后就可以使用DLL中的show导出函数了

包含DLL的.h和.lib文件也可以通过下面的方式设置
tools->option->Directories中设置要包含的.h和.lib的路径,然后重新编译程序就可以了

2、显示加载DLL
使用LoadLibrary加载DLL,然后用typedef定义函数指针,使用GetProcAddress函数获得导出函数的地址,将该地址赋值给前面定义的函数指针,然后通过这个函数指针来调用导出函数
如:
HINSTANCE hInst = LoadLibrary("DLL文件名称");
if(hInst)
{ //定义函数指针
typedef 函数返回类型 (WINAPI *MYFUNC)(函数参数);
MYFUNC fun = NULL;

fun=(MYFUNC)GetProcAddress(hInst, "导出函数名称");
if(fun)
{
fun(函数参数);//通过函数指针调用导出函数
}
FreeLibrary(hInst); //释放DLL资源
}
zhangnanonnet 2004-05-09
  • 打赏
  • 举报
回复
只需要DLL就可以调用
将DLL放在EXE目录下
比如:
AnalyzeSMS.dll中的函数原型
extern "C" BOOL PASCAL EXPORT AnalyzeGameSMS(char * sms, // IN 短信内容
char * content, // OUT 回复内容
char * record, // OUT 中奖记录(没有为空字符串)
char * smstype, // OUT 短信(游戏)类型
char * count) // OUT 积分

你可以这样调用
BOOL bRet;

typedef BOOL (far pascal * SQRTPROC2)(char *, char *, char *, char *, char *);
HINSTANCE hInstance;

SQRTPROC2 pFunction;
VERIFY(hInstance=::LoadLibrary("AnalyzeSMS.dll"));
VERIFY(pFunction=(SQRTPROC2)::GetProcAddress(hInstance,"AnalyzeGameSMS"));

bRet = pFunction(sms, content, record, smstype, count);

return bRet;
aspnetwuxueyou 2004-05-09
  • 打赏
  • 举报
回复
// use import lib ( dynamic linking) or static lib ( static linking)
#include <xxx.h>
#pragma comment(lib, "comsupp.lib")

// dynamic linking
LoadLibrary("***.dll")
GetProcAddress
code8238 2004-05-09
  • 打赏
  • 举报
回复
得有文档啊!你得知道个动态链接库是干什么的啊!
在你的工程里写上
#include "XXX.H"
#pragma comment(lib,"XXX.lib")
MSVC vs. MinGW 之 (lib,dll,def,obj,exe) vs (a,dll,def,o,exe) 玩转攻略手记 一份粗糙的研究记录,有待补完和整理。 MinGW: c -> o gcc -c a.c c -> exe gcc a.c libs.o -o a.exe (从主程序a.c,附加libs,生成a.exe) o -> exe gcc a.o b.o ... -o main.exe c -> dll,def,a gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,liba.a a -> dll a2dll liba.a dll -> a: dlltool --dllname a.dll --def a.def --output-lib liba.a (需要def文件) a -> def: dumpbin /exports lib.a > lib.def (在windows上调用,def需要修改) dll -> def : pexports a.dll -o > a.def (这里的-o是指给函数标序号) lib -> def : reimp -d a.lib lib -> a: (for __cdecl functions in most case) reimp a.lib; (for __stdcall functions) MSVC: c -> lib cl /LD a.c (注意已经定义了export列表) c -> dll cl /LD a.c c -> obj cl /c a.c c -> exe cl a.c /out:a.exe dll ->lib lib /machine:ix86 /def:a.def /out:a.lib (需要def文件) obj ->lib lib a.obj b.obj... /out:mylib.lib dll ->def DUMPBIN a.dll /EXPORTS /OUT:a.def (生成的def需要做修正) lib ->def reimp -d a.lib (这个要在MSYS+MinGW下用) 关于这些工具的适用范围可以很容易的理解和记忆。 dll和exe都是PE文件,所以可以使用pexports. lib和a是静态库文件,都是归档类型,不是PE格式。所以不能使用pexports. dll可以使用dlltool. lib可以使用lib, 和reimp(lib->a工具) 所有的bin文件,包括dll,exe,lib,a都可以使用dumpbin. 参考: http://hi.baidu.com/kaien_space/blog/item/5e77fafa2ba9ff16a8d3110a.html Mingw官网文档: http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs http://oldwiki.mingw.org/index.php/CreateImportLibraries http://www.mingw.org/wiki/FAQ http://hi.baidu.com/opaquefog/blog/item/9b21b6deb324e25dccbf1ab7.html http://qzone.qq.com/blog/8330936-1238659272 http://hi.baidu.com/jzinfo/blog/item/b0aa1d308de99f9da8018e00.html 本篇测试用代码: 1. main.cpp #include #include #include "mylib.h" using namespace std; int main() { char str[]="Hello world!"; printhello(str); return 0; } 2. mylib.cpp #include #include #include "mylib.h" using namespace std; void EXPORT printhello(char *str) { cout << str << endl; } 3. mylib.h #define EXPORT __declspec(

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧