vs2010中c++dll调用源码分析,有谁能看看错在哪?

dll的源文件1.dl.h#ifndefDL_H#defineDL_Hextern"C"__declspec(dllexport)int__stdcalladd(intx... dll的源文件
1.dl.h
#ifndef DL_H
#define DL_H
extern"C" __declspec(dllexport) int __stdcall add(int x, int y); //
#endif
2.dl.cpp
#include"dl.h"
int __stdcall add(int x, int y)
{return (x+y);}
dll调用函数dlcall.cpp
#include <stdio.h>
#include <windows.h>

typedef int ( __stdcall*lpAddFun) (int,int);
int main (){
HINSTANCE hDll;
lpAddFun addFun;
hDll=LoadLibrary("..\\Debug\\dl.dll");
if (hDll !=NULL){
addFun =(lpAddFun)GetProcAddress(hDll, "add");
if (addFun !=NULL)
{
int result = addFun(2,3);
printf("%d\n",result);
}
FreeLibrary(hDll);
}
return 0;
}
有满意答案还可以继续加分
debug是Loadlibrary不成功
展开
 我来答
百度网友1fc36d4
2011-07-28 · TA获得超过3131个赞
知道大有可为答主
回答量:1497
采纳率:100%
帮助的人:1888万
展开全部
把 __stdcall换为__cdecl就可以了,这是最直接的办法。 我在VS2010下调试通过了的。

你找个动态链接库查看器,看下你的dl.dll,估计导出函数名不是add,而是add@8,也就是使用了2个int传参,占用了8字节堆栈,于是命名为add@8.如果你addFun =(lpAddFun)GetProcAddress(hDll, "add@8");也是可以的。

至于你说的Loadlibrary不成功,请确认dl.dll是在dlcall.cpp的同级目录下子文件夹Debug下。你可以用绝对路径先测试下。
vbtraz
2011-07-28 · TA获得超过5533个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4556万
展开全部
贴错误提示

用vs带的工具打开那个dll看看正常不

另外不知道你这个目录结构是什么样的。 在vs界面里运行函数这时候当前目录一般是放源文件的那个目录保险起见调试阶段最好用绝对路径
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
危献e3
2011-07-28 · TA获得超过2054个赞
知道大有可为答主
回答量:2738
采纳率:0%
帮助的人:2023万
展开全部
使用绝对路径成功吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式