大家好,我在使用GetProcAddress()时遇到了迷惑,我下载了一个Wintech OPC开发工具包,里面含有Wtclient.dll,使用dll export viewer查看到其中一个函数为_Deactivate30MinTimer@4,从这里可以看出是使用__stdcall调用规则的,但是我看到其带有的WTclientAPI.h里面的函数原型为_declspec(dllexport) BOOL WINAPI Disable30MinTimer (LPCSTR Authorization); ,我在VC6里面使用Regno=(pReg)GetProcAddress(hReg,"Deactivate30MinTimer"),则在使用时出错,如果这样写Regno=(pReg)GetProcAddress(hReg,"_Deactivate30MinTimer@4")就是对的,我感觉很麻烦,每次都不能直接使用诸如Deactivate30MinTimer这样的函数,而是使用类似_Deactivate30MinTimer@4这样的语句,我想问一下,有什么办法可以直接使用函数名?
解决方案 »
- 双管道cmd 为什么读管道时总有一段乱码
- 最近在学openCV,问个菜菜的问题,为什么调用cvCopy后保存的图片变反了
- VC中new的求助
- 奇怪问题,要求置顶,win32 Dynamic-link library 连接 sybase 数据库的问题,详细请进。
- 做界面好难呀,图标又搞不清了
- 谁能提供一段代码。在本机的80端口用CSocke接收自己机器发的IE的数据包
- 如何让我的对话框截获WM_KILLFOCUS消息,我是这样做的,但还是不行,赐教啊!!!
- opencv中的cvsize函数
- help help help help !!!!!!!!!!!!!!
- 工具的使用方法
- XPE下VC程序的执行问题
- 如何实现WinRar那样,右键点击文件或文件夹出现自己程序的菜单
MyFun Fun1=Regno;MyFun就是_declspec(dllexport) BOOL WINAPI Disable30MinTimer (LPCSTR Authorization);的Typedef函数指针定义然后以后拿Fun1(xxxxxx)用就行了
如果看到其带有的WTclientAPI.h,说明可能有LIB文件,你可以把.LIB和.H的文件包含到工程中就可以直接按常规的函数调用方式使用函数了.
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
_declspec(dllexport) BOOL WINAPI Disable30MinTimer (LPCSTR Authorization);
#ifdef __cplusplus
}#endif
==========
改一下不就行了。
原先我也以为这样可以,但是后来的程序中出现错误,才不得不重新重视这个问题.如果不对DLL中导出的函数加__declspec(dllimport)修饰,会产生一些内存错误.在类的导出时,这个问题更为严重.
所以,虽然可以运行,但为了安全起见,还是加上__declspec(dllimport)修饰符号.