导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • VC/MFC界面
  • VC/MFC 进程
  • VC/MFC 数据库
  • VC++技术资源

DLL,简单拿分问题!VC

otuotu 2002-07-21 01:52:59
自己写的DLL编译通过。如下:
**** .h:*****
#define DLL_EXPORT __declspec(dllexport)
......
DLL_EXPORT int PositionDectect(BYTE *pDib, int *PosInfo);
**** .cpp*****
DLL_EXPORT int PositionDectect(BYTE *pDib, int *PosInfo)
{
........
}
在我的另一个程序中调用这个DLL
**********cpp**********
typedef int (*MyPositionDectect)(BYTE *pDib, int *PosInfo);
.......

HINSTANCE hFunction=LoadLibrary("kernel.dll");
VERIFY (hFunction);
MyPositionDectect PositionDectect=(MyPositionDectct)GetProcAddress(hFunction,"PositionDectect");

调用哪里错了,在线等待!




...全文
12 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnzzz 2002-07-21
你的#define DLL_EXPORT __declspec(dllexport)
有误,不信你用Dependency Walker看看
肯定没有导出PositionDectect,而是导出了_PositionDectect_@...之类东东,不如这样定义
#define DLL_EXPORT extern "C" __declspec(dllexport)
或者#define DLL_EXPORT extern 'C' __declspec(dllexport)
不好意思,我忘了是不是双引号了,你试试看.
或者用DEF文件也可以.
回复
otuotu 2002-07-21
sorry!my mistake
回复
otuotu 2002-07-21
the same mistake
回复
96151024 2002-07-21
typedef int (*MyPositionDectect)(BYTE *pDib, int *PosInfo);
改为
typedef int _stdcall (*MyPositionDectect)(BYTE *pDib, int *PosInfo);
式式



typedef int __declspec(dllimport) (*MyPositionDectect)(BYTE *pDib, int *PosInfo);
回复
otuotu 2002-07-21
如果去掉最後一句
MyPositionDectect PositionDectect=(MyPositionDectct)GetProcAddress(hFunction,"PositionDectect");
編譯就不會報錯,他報'MyPositionDectect' : undeclared identifier
回复
otuotu 2002-07-21
96151024(富贵山庄) :看过了是PositionDectect,没错的
回复
96151024 2002-07-21
DLL_EXPORT int PositionDectect(BYTE *pDib, int *PosInfo);
定义的过程,在DLL文件里面的函数名称不是PositionDectect,你用vc的工具
depends察看就知道叫什么了,你可以这样定义那么名称就不会被改变

自己定义一个扩展名为DEF的文件在DEF里面加入:
EXPORTS:
PositionDectect;

函数这样定义

int _stdcall PositionDectect(BYTE *pDib, int *PosInfo);
回复
otuotu 2002-07-21
编译没通过啊,不是执行的时候出错。kernel.dll不会重明。2000系统的是kernel32.dll
回复
96151024 2002-07-21
DLL_EXPORT int PositionDectect(BYTE *pDib, int *PosInfo);
定义的过程,在DLL文件里面的函数名称不是PositionDectect,你用vc的工具
depends察看就知道叫什么了,你可以这样定义那么名称就不会被改变

自己定义一个扩展名为DEF的文件在DEF里面加入:
EXPORTS:
PositionDectect;

函数这样定义

int _stdcall PositionDectect(BYTE *pDib, int *PosInfo);
回复
lqbn 2002-07-21
同意xuying()的。
回复
watchnight 2002-07-21
请问你的dll是叫kernel.dll吗?
如果不是在LoadLibrary的参数里写入实际的dll的full path
回复
xuying 2002-07-21
你编译生成的dll是kernel.dll吗?会不会和系统的重复了?
HINSTANCE hFunction=LoadLibrary("kernel.dll");
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……