
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不成功 展开
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不成功 展开
3个回答
展开全部
把 __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下。你可以用绝对路径先测试下。
你找个动态链接库查看器,看下你的dl.dll,估计导出函数名不是add,而是add@8,也就是使用了2个int传参,占用了8字节堆栈,于是命名为add@8.如果你addFun =(lpAddFun)GetProcAddress(hDll, "add@8");也是可以的。
至于你说的Loadlibrary不成功,请确认dl.dll是在dlcall.cpp的同级目录下子文件夹Debug下。你可以用绝对路径先测试下。
展开全部
贴错误提示
用vs带的工具打开那个dll看看正常不
另外不知道你这个目录结构是什么样的。 在vs界面里运行函数这时候当前目录一般是放源文件的那个目录保险起见调试阶段最好用绝对路径
用vs带的工具打开那个dll看看正常不
另外不知道你这个目录结构是什么样的。 在vs界面里运行函数这时候当前目录一般是放源文件的那个目录保险起见调试阶段最好用绝对路径
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用绝对路径成功吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询