
(高分)关于c++调用dll库的问题。dllmain
手上有几个dll库文件,还有一份文档只介绍了,这些库中的部分函数,我用,dllexport工具查看了一下,发现,其中一个dll库文件中有dllmain函数。文档介绍的函数...
手上有几个dll库文件,还有一份文档只介绍了,这些库中的部分函数,我用,dllexport工具查看了一下,发现,其中一个dll库文件中有dllmain函数。文档介绍的函数在其他库中,问题如下:
1.我直接加载具有dllmain函数的库,然后调用其他函数吗?如果是,核心代码如何写,特别是,获取其他函数如何写?
2.我现在的操作是,直接加载具有文档说明的函数的库,然后获取函数,这里都成功了,但是,函数一使用,就报内存冲突,百度了一下,说是,函数约定不正确或者溢出,改了一天的约定,还是不行。 展开
1.我直接加载具有dllmain函数的库,然后调用其他函数吗?如果是,核心代码如何写,特别是,获取其他函数如何写?
2.我现在的操作是,直接加载具有文档说明的函数的库,然后获取函数,这里都成功了,但是,函数一使用,就报内存冲突,百度了一下,说是,函数约定不正确或者溢出,改了一天的约定,还是不行。 展开
展开全部
1、你知道你的DLL是使用什么编译器编译的吗?
2、如果是VS系列,看一看DLL里面的函数名就可以了,
stdcall的一般是xxxxx@12
cdecl的一般是_xxxxx
很好区分的
3、如果你懂汇编,看看压栈的过程应该很简单。
其实,有没有文档,只要函数本身是正确的就可以了。
不过有的时候,你传递的值不对也可能引发错误。
2、如果是VS系列,看一看DLL里面的函数名就可以了,
stdcall的一般是xxxxx@12
cdecl的一般是_xxxxx
很好区分的
3、如果你懂汇编,看看压栈的过程应该很简单。
其实,有没有文档,只要函数本身是正确的就可以了。
不过有的时候,你传递的值不对也可能引发错误。
追问
它的函数名是Z_Connet_NET是什么约定了?
压栈的过程能看,但是看不懂,然后报错以后,前面是地址后面全是?号
追答
我看你的问题解决了,就不必要继续回答了,其实很简单,如果名称就是原文。
是cdecl的C++的形式,但是更像MingW风格。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LoadLibrary 函数加载Dll的时候就已经执行了里面的DLLMain了。
GetProcAddress(dll句柄,"名称");
call 那个地址
DLL 一般的函数声明为STDCALL
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);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
dllmain是dll加载的时候自动 执行的,不需要去主动调用 。其他的不知道具体情况,无从判断 。
更多追问追答
追问
那大哥,你看这样可以不?我把dll库及其发给你,你帮我从里面成功调用一个函数,可否?
追答
我看了下上面你跟别人的交流,我发现你用这个动态 连接库是用COM接口进行一些通信的,这样可能是操作硬件的,没有所需的硬件根本不可能执行的,而且当端口未打开成功,就进行调用 ,这样就会报所谓的内存冲突。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询