DWORD  GetIPValue2(CString  m_ip)
  { AFX_MANAGE_STATE(AfxGetStaticModuleState());    unsigned  long  m_value=0;
    if((m_value=inet_addr(m_ip)>  0))
      return  ntohl(m_value);
    return  0;
  
  }
  

解决方案 »

  1.   

    DEBUG下用CJ60Libd.dll、CJ60Libd.lib
    RELEASE下用CJ60Lib.dll、CJ60Lib.lib
      

  2.   

    1. 我也碰见同样的问题,原因是 CString 是类,当然不行
    2. 你忘了它的lib库,就可以编译过去了.
      

  3.   

    一般不用CString 作为参数的
    应该是
    DWORD  GetIPValue2(LPCTSTR m_ip)调用的时候可以这样CString m_strIPAddr;
    ...DWORD dwIP = GetIPValue2(m_strIPAddr);因为CString 要用Thread State的
    所以传的参数有问题(和Thread State)有关系
      

  4.   

    但是同一个dll我有做一个测试函数
    CString GetStrFromDll(CString m_str)
    {
         return m_str;
    }
    在工程中调用就可以呀?????
    希望能讲解,谢了。先谢过前面几位朋友光临,我挥守诺给分的,请大家尽快帮忙解决我的问题
    特别是的二个。对于日落先河的见解,我先试试
      

  5.   

    DEBUG下用CJ60Libd.dll、CJ60Libd.lib 
    RELEASE下用CJ60Lib.dll、CJ60Lib.lib
    只要链接库配置好了一定能通过.
      

  6.   

    我也不知道,不过以后迟早会碰见的还是在这里做个记号先,以备以后查询,常被无患嘛顺便帮你UP一下:
     
                   UP~~~~~~~~~~~~~~~~~~~~
      

  7.   

    如果你要在函数里面传递对象,一定要保证两边(exe:dll/函数和函数的caller)里面的该对象的结构一致性。
    而CString在debug/release方式下的结构是不太一样的,我估计是你混用了dll/exe的debug和release版本造成的
      

  8.   

    release情况下的编译选项要注意,不要选最快速度优化
      

  9.   

    TO :dct1999(宇宙天空
    能说说怎样改库的调用吗,我看了settting里的Link里的input写的是..\lib
    其它的地方没看到怎么改呀,
    谢了因为小弟刚接触这个东西,请您想些说说好吗,怎样设置,我要的是static release版
    拜托了
      

  10.   

    我想函数的参数不能传CString,而应该传一个CString的引用,写法值得商榷啊。
      

  11.   

    以前好像碰到过,你讲两个工程放在一个workspace里试试,注意设置dependcy!
      

  12.   

    DWORD GetIPValue2(CString& m_ip) 
    { AFX_MANAGE_STATE(AfxGetStaticModuleState()); unsigned long m_value=0; 
    if((m_value=inet_addr(m_ip)> 0)) 
    return ntohl(m_value); 
    return 0; } 
      

  13.   

    如果你将C++类包含在DLL中,那么一般来说,你需要将你的代码编译成Release版本来调用Release编译过的DLL;同样,你需要将代码变以成Debug版本来调用Debug版本的Dll.
    你的DLL现在一定是Debug版本,所以仅仅将代码Release掉是不行的。
    问题是在于Release版本和Debug版本的内存管理函数不一样,比如在DEBUG版本下,new被定义为DEBUG_NEW,同样的,其他内存管理函数都不同,比如malloc这样的函数在Debug下都被重新定义过。只有GlobalAlloc, VirtualAlloc这样的API函数才会在Debug版本和Release版本保持一致。所以,比如你在使用Release版本下的new分配了内存,在Debug版本下调用delete,或者反之,都会出错。
    而在参数中使用CString对象将会导致在调用者调用CString的构造函数,其中将会调用内存管理函数分配动态内存,而DLL在退出时参数已经无效,就调用CString的析构函数,释放内存,导致出错。
    如果参数声明改为
    DWORD GetIPValue2(const CString& m_ip) 
    就没有问题了
    而且C++中的习惯也应该避免将对象直接作为参数来传递,而是应该适用引用或者指针。