(高分)关于c++调用dll库的问题。dllmain

手上有几个dll库文件,还有一份文档只介绍了,这些库中的部分函数,我用,dllexport工具查看了一下,发现,其中一个dll库文件中有dllmain函数。文档介绍的函数... 手上有几个dll库文件,还有一份文档只介绍了,这些库中的部分函数,我用,dllexport工具查看了一下,发现,其中一个dll库文件中有dllmain函数。文档介绍的函数在其他库中,问题如下:
1.我直接加载具有dllmain函数的库,然后调用其他函数吗?如果是,核心代码如何写,特别是,获取其他函数如何写?
2.我现在的操作是,直接加载具有文档说明的函数的库,然后获取函数,这里都成功了,但是,函数一使用,就报内存冲突,百度了一下,说是,函数约定不正确或者溢出,改了一天的约定,还是不行。
展开
 我来答
海狮2D
2012-09-26 · TA获得超过3021个赞
知道大有可为答主
回答量:1904
采纳率:55%
帮助的人:1067万
展开全部
1、你知道你的DLL是使用什么编译器编译的吗?
2、如果是VS系列,看一看DLL里面的函数名就可以了,
stdcall的一般是xxxxx@12
cdecl的一般是_xxxxx
很好区分的
3、如果你懂汇编,看看压栈的过程应该很简单。
其实,有没有文档,只要函数本身是正确的就可以了。
不过有的时候,你传递的值不对也可能引发错误。
追问
它的函数名是Z_Connet_NET是什么约定了?

压栈的过程能看,但是看不懂,然后报错以后,前面是地址后面全是?号
追答
我看你的问题解决了,就不必要继续回答了,其实很简单,如果名称就是原文。
是cdecl的C++的形式,但是更像MingW风格。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nusicvvv
2012-09-26 · TA获得超过2576个赞
知道大有可为答主
回答量:3576
采纳率:33%
帮助的人:2069万
展开全部
LoadLibrary 函数加载Dll的时候就已经执行了里面的DLLMain了。
GetProcAddress(dll句柄,"名称");
call 那个地址

DLL 一般的函数声明为STDCALL
更多追问追答
追问
call怎么用的,好像,大家的c++调用都是,
我百度了一下,好像call讲的也不多,
typedef VARIANT_BOOL (__stdcall *PFUNCTION)(long a,long b ,long c);
HMODULE hLib = ::LoadLibrary("zkemsdk.dll");
PFUNCTION myAddFunction =(PFUNCTION)::GetProcAddress(hLib,"DllMain.Z_Connect_NET");
printf("调用函数tesdll的函数func_test1:返回值为%d\n",(*myAddFunction)(a,b,c));
::FreeLibrary(hLib);
追答
myAddFunction(1,2,3);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
望穿秋水待伊人
2012-09-26 · TA获得超过644个赞
知道小有建树答主
回答量:708
采纳率:100%
帮助的人:826万
展开全部
dllmain是dll加载的时候自动 执行的,不需要去主动调用 。其他的不知道具体情况,无从判断 。
更多追问追答
追问
那大哥,你看这样可以不?我把dll库及其发给你,你帮我从里面成功调用一个函数,可否?
追答
我看了下上面你跟别人的交流,我发现你用这个动态 连接库是用COM接口进行一些通信的,这样可能是操作硬件的,没有所需的硬件根本不可能执行的,而且当端口未打开成功,就进行调用 ,这样就会报所谓的内存冲突。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甫晓蓝G8
2012-09-26
知道答主
回答量:22
采纳率:0%
帮助的人:9.1万
展开全部
学习
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式