读书人

VC8编译的库,在VC6编译的exe中产生运行

发布时间: 2012-03-01 10:25:47 作者: rapoo

VC8编译的库,在VC6编译的exe中产生运行时错误
你好,

我在VC8下写了一个动态库,其中有一个接口
struct DLL_EXP IXYZ
{
public:
IXYZ(){}
virtual ~IXYZ(){}

public:
virtual void func( std::string, int idx ) = 0;
};
IXYZ *g_itf = 0;
并提供了一个接口指针注册的函数
void DLL_EXP reg(IXYZ *itf)
{
// 将itf保存.
g_itf = itf;
}
其意图是要在库中用注册的接口指针调用注册接口的功能函数.
void invokeFunc()
{
std::string str("abce");
int idx = 100;
if( g_itf != 0 )
g_itf->func( str, idx );
}


在VC6下写了一个exe,其中实现接口IXYZ的所有功能,并将实现类的对象指针用函数reg进行了注册.
class CImp : public IXYZ
{
public:
CImp(){}
virtual ~CImp(){}
public:
virtual void func( std::string, int idx )
{
std::cout << str << " " << idx << std::endl;
}
};
......
CImp imp;
......
reg( &imp );

但在调用注册接口的功能函数时,参数全部都变成未初始化的值.
即在前面的g_itf->func( str, idx )处,
在进入func函数时,那个字符串参数中的指针为0xcdcdcdcd, 那个int型值参数值为0.

不知何故,望高人指点,不胜感激.

unforgiving
2008-07-05凌


[解决办法]
VC6和VC8的 std::string实现相差很大。
所以你得用const char*来做参数。
最好是一个版本的编译器编译出来的dll和exe

读书人网 >C++

热点推荐