回 帖 发 新 帖 刷新版面

主题:minGW 调用MSVC的DLL, 无法传递参数....求高人解...

MSVC2005 部分:

// XyzLibrary.h

 C/C++ code#ifdef XYZLIBRARY_EXPORTS
#define XYZAPI __declspec(dllexport)
#else
#define XYZAPI __declspec(dllimport)
#endif
 
#ifdef __cplusplus
#   define EXTERN_C     extern "C"
#   define XYZHANDLE    IXyz* 

struct IXyz
{
    virtual int Foo(int n) = 0;
    virtual void Release() = 0;
};

#endif  
 
EXTERN_C XYZAPI int  hzf  (int);
EXTERN_C XYZAPI XYZHANDLE  hzfXyz  (VOID);




// XyzLibrary.cpp

C/C++ code#include "stdafx.h"
#include "stdio.h"
#include "XyzLibrary.h"
 
 
class XyzImpl : public IXyz
{
public:
    int Foo(int n);
    void Release();
};

int XyzImpl::Foo(int n)
{
    printf("Foo called....%d\n",n);
    return n * n;
}

void XyzImpl::Release()
{
    delete this;
}
 

XYZHANDLE  hzfXyz()
{
    printf("\n\nhzfXyz() called ....\n");
    return new XyzImpl; 
}

int hzf(int n)
{
        printf("\n\nhzf(int) called ....\n");
        XyzImpl *xyz = new XyzImpl;
        return  xyz->Foo(n);
}
 


以上编译得到 XyzLibrary.dll



minGW 代码部分:

  ///mian.cpp

C/C++ code    
#include <stdio.h>
#include "XyzLibrary.h"


int main(int  ,char**  )
{
     IXyz *xyz =  hzfXyz();
     printf(" hzfXyz call: %d\n" ,  xyz->Foo(5));

      printf(" hzf call: %d\n" , hzf(8));
     
    return 0;
}





////下面是输出:
hzfXyz() called ....
Foo called....169091488 /// 这里的数值应该是 5 , 却得到了 169091488
 hzfXyz call: -982866944 ///这里的数值应该是 25, 却得到了 169091488 * 169091488 ,溢出....


hzf(int)
Foo called....8
 hzf call: 64


  问题:
在 mian 中获取 XyzImpl的指针,并调用 XyzImpl 的 Foo 函数, Foo 函数能正确调用,但是参数(上例在是 5) 却无法正确传递,而是传递了一个随机值....

我在 main 在调用 hzf(int) 函数时, 因为 XyzImpl 是在 MSVC 的 DLL 中创建的,所以函数运行结果一正确....

  现在我就搞不懂, 为什么在 minGW中 的 XyzImpl 指针无法正确传递 int 这样的标准 C 类型数据呢??? 如果我要传递 STL 的数据类型, 例如 std::string, std::list 等等 ,不是更不可能了吗??  

请问处理这个问题呢...望高人解答 ...谢谢!

回复列表 (共1个回复)

沙发

寻找中国的最优秀的网商领袖精英 淘宝商盟 qq: 908889846 
当今世界正经历着全球经济一体化的大潮,中国本土企业也因此面临着前所未有的机遇与挑战。
在这场洗礼中,哪些互联网平台有能力成为世界级的电子商务平台?网商精英要怎样做,才能最终成长为世界级网商精英领袖?
淘宝商盟平台震撼登场,携手淘宝30万商家联盟购物商城。
平台刚刚启动,互联网的网商精英请咨询qq: 908889846 
占领市场第一先机,合力打造网商系统!
淘宝商盟官网   www.taobaosm.com
 http://blog.sina.com.cn/tbsm8
淘宝商盟奖励制度

我来回复

您尚未登录,请登录后再回复。点此登录或注册