在服务程序中服务启动时用LoadLibrary加载dll并取得dll中函数指针,服务停止时调用FreeLibrary释放加载的dll,现在问题是通过GetProcAddress得到的函数指针如何在其他cpp文件中调用,也就是说如何构造个函数头文件包含进需要调用的cpp中?目前在服务程序的头文件myserv.h里
typedef BOOLEAN(* CONNECTDB)(void);
typedef BOOLEAN(*ISDBCONNECTED)(void);
typedef BOOLEAN(* LOGIN)(const char*,const char*);CONNECTDB ConnectDb;
ISDBCONNECTED IsDbConnected;
LOGIN Login;可是编译时,出现连接错误:
myserv.obj : error LNK2005: "unsigned char (__cdecl* ConnectDb)(void)" (?ConnectDb@@3P6AEXZA) already defined in MySock.obj
myserv.obj : error LNK2005: "unsigned char (__cdecl* IsDbConnected)(void)" (?IsDbConnected@@3P6AEXZA) already defined in MySock.obj
myserv.obj : error LNK2005: "unsigned char (__cdecl* Login)(char const *,char const *)" (?Login@@3P6AEPBD0@ZA) already defined in MySock.obj
而MySock.cpp里包含了MyServ.h
请问大伙如何用LoadLibrary的方式取得的dll中的函数,并且这些函数在工程中其他类的cpp文件里都能调用?
typedef BOOLEAN(* CONNECTDB)(void);
typedef BOOLEAN(*ISDBCONNECTED)(void);
typedef BOOLEAN(* LOGIN)(const char*,const char*);CONNECTDB ConnectDb;
ISDBCONNECTED IsDbConnected;
LOGIN Login;可是编译时,出现连接错误:
myserv.obj : error LNK2005: "unsigned char (__cdecl* ConnectDb)(void)" (?ConnectDb@@3P6AEXZA) already defined in MySock.obj
myserv.obj : error LNK2005: "unsigned char (__cdecl* IsDbConnected)(void)" (?IsDbConnected@@3P6AEXZA) already defined in MySock.obj
myserv.obj : error LNK2005: "unsigned char (__cdecl* Login)(char const *,char const *)" (?Login@@3P6AEPBD0@ZA) already defined in MySock.obj
而MySock.cpp里包含了MyServ.h
请问大伙如何用LoadLibrary的方式取得的dll中的函数,并且这些函数在工程中其他类的cpp文件里都能调用?
解决方案 »
- 关于CEdit拦截ESC键的问题
- 我现在双击对话框,原来是出现对话框编辑器,现在出现mfcclasswizard,怎么改回去?
- 一个以前一直没注意到的问题
- 在vc中怎么让Date Time Picker控件显示英文,比如“星期天”显示为“Sunday”
- 基于Com/ActiveX图形控件在Vc中使用免费使用 http://one.fsphost.com/sofish 下载,欢迎交流
- 全局变量如何生成与销毁?
- 老大们,救命啊,我有一个函数在按钮事件调用没问题,线程中调用就出问题.
- 测试别人用vs2005生成的Dll库,在别人的电脑上能用,在我的电脑上就提示程序初始化失败(0xc0150002)的一个错误,搞了好久没搞定,请大侠们多多指点
- 一个PixelFormat为Format8bppIndexed的bitmap如何显示在picturebox中啊
- 如何使用windows API函数对串口编程
- VC++ 图像处理
- 为我的、你的、他(她)的母亲健康!快乐!顺心如意!。。。散分~
CONNECTDB FnConnectDb;
ISDBCONNECTED FnIsDbConnected;
LOGIN FnLogin;
在头文件里声明,在源文件里定义,extern
ISDBCONNECTED IsDbConnected;
LOGIN Login;
这个放到cpp中
头文件中用
extern CONNECTDB ConnectDb;
extern ISDBCONNECTED IsDbConnected;
extern LOGIN Login;
声明可以有多个,但是定义只能有一个,可能是你的这个头文件有多个地方包含了
typedef BOOLEAN(*ISDBCONNECTED)(void);
typedef BOOLEAN(* LOGIN)(const char*,const char*); extern CONNECTDB ConnectDb;
extern ISDBCONNECTED IsDbConnected;
extern LOGIN Login;
//再在myserv.cpp文件里声明
CONNECTDB ConnectDb;
ISDBCONNECTED IsDbConnected;
LOGIN Login;
#ifndef _MYSERV_
#define _MYSERV_
....../*定义的变量*/
#endif
没起到保护作用?
你现在遇到的问题是,在头文件中定义了变量,这样相当于包含这个头文件的各个cpp文件中分别定义了这些变量,而不是使用公共变量,连接时报错是因为连接时发现模块之间变量名字冲突。