none
动态链接库传参 RRS feed

  • 问题

  • 在引用动态链接库的时侯,免不了要传送参数,下面是我的def导出文件:

    LIBRARY dynclass.dll
    EXPORTS
     CreateMyClass               @2 PRIVATE          ; object creation
     DeleteMyClass               @3 PRIVATE          ; object destruction
     GetClassMethod              @4 PRIVATE          ; method access1
     GetClassfilelenth(char* file)          @5 PRIVATE          ; method access2

    2011年10月30日 6:57

答案

全部回复

  • 下面是函数

    void CMyClass::DoSomethingUseful()
    {
      OutputDebugString ( "This is CMyClass::DoSomethingUseful()\n");
    }


    int CMyClass::getfilelenth (char* file)
    {
     ifstream iinPutFile;
     iinPutFile.clear();
     int length;
     
     iinPutFile.open(file,ios::binary|ios::in);  
     iinPutFile.seekg   (0,   ios::end);
     length   =  iinPutFile.tellg();
     iinPutFile.close();
     return length;
     
    }

    2011年10月30日 6:58
  • 头文件:

    #ifndef __DYNCLASS_H
    #define __DYNCLASS_H

    #include <windows.h>

    #ifdef _DLL // assume this is defined when we build the dll
    #define _DYNLINK __declspec( dllexport)
    #else
    #define _DYNLINK __declspec( dllimport)
    #endif

    class _DYNLINK CMyClass
    {
    public:
       CMyClass ();

     virtual ~CMyClass();

     void DoSomethingUseful();
     int getfilelenth (char* file);
    private:
     char* file;
    };

    typedef void ( CMyClass::*PMYCLASSMETHOD)();
    typedef int ( CMyClass::*PMYfilelenth)(char* file);

    #ifndef _DLL
    typedef CMyClass* ( *PFNCREATEMYCLASS)();
    #else
    _DYNLINK CMyClass* CreateMyClass()
    {
     return ( new CMyClass());
    }
    #endif

    #ifndef _DLL
    typedef void ( *PFNDELETEMYCLASS)( CMyClass*);
    #else
    _DYNLINK void DeleteMyClass ( CMyClass* pObj)
    {
     delete pObj;
    }
    #endif

    #ifndef _DLL
    typedef PMYCLASSMETHOD ( *PFNGETCLASSMETHOD)();
    #else
    _DYNLINK PMYCLASSMETHOD GetClassMethod ()
    {
     return &CMyClass::DoSomethingUseful;
    }
    #endif


    #ifndef _DLL
    typedef int ( *PMYfilelenth1)(char* file);
    #else
    _DYNLINK int GetClassfilelenth (char* file)
    {
     return &CMyClass::getfilelenth (char* file);
     
    }
    #endif


    #endif // ndef __DYNCLASS_H

    2011年10月30日 6:59
  • 其中GetClassfilelenth(char* file)始终不能编译通过,不知道怎么实现传参
    2011年10月30日 6:59
  • 你好,

     

    您能够告知我们,编译器所提示的错误呢?这将有助于我们分析并解决问题。谢谢您的理解


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年11月1日 2:19
  • c:\1\myclassdll\dynclass.h(61) : error C2144: syntax error : missing ')' before type 'char'
    c:\1\myclassdll\dynclass.h(61) : error C2660: 'getfilelenth' : function does not take 0 parameters
    c:\1\myclassdll\dynclass.h(61) : error C2059: syntax error : ')'
    c:\1\myclassdll\dynclass.cpp(55) : error C2065: 'ifstream' : undeclared identifier
    c:\1\myclassdll\dynclass.cpp(55) : error C2146: syntax error : missing ';' before identifier 'iinPutFile'
    c:\1\myclassdll\dynclass.cpp(55) : error C2065: 'iinPutFile' : undeclared identifier
    c:\1\myclassdll\dynclass.cpp(56) : error C2228: left of '.clear' must have class/struct/union type
    c:\1\myclassdll\dynclass.cpp(59) : error C2228: left of '.open' must have class/struct/union type
    c:\1\myclassdll\dynclass.cpp(59) : error C2653: 'ios' : is not a class or namespace name
    c:\1\myclassdll\dynclass.cpp(59) : error C2065: 'binary' : undeclared identifier
    c:\1\myclassdll\dynclass.cpp(59) : error C2653: 'ios' : is not a class or namespace name
    c:\1\myclassdll\dynclass.cpp(59) : error C2065: 'in' : undeclared identifier
    c:\1\myclassdll\dynclass.cpp(60) : error C2228: left of '.seekg' must have class/struct/union type
    c:\1\myclassdll\dynclass.cpp(60) : error C2653: 'ios' : is not a class or namespace name
    c:\1\myclassdll\dynclass.cpp(60) : error C2065: 'end' : undeclared identifier
    c:\1\myclassdll\dynclass.cpp(61) : error C2228: left of '.tellg' must have class/struct/union type
    c:\1\myclassdll\dynclass.cpp(62) : error C2228: left of '.close' must have class/struct/union type
    2011年11月1日 11:33
  • 你好,

     

    您能够告知我们,编译器所提示的错误呢?这将有助于我们分析并解决问题。谢谢您的理解


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    我把源代码发给你好了,帮我看看,邮件怎么发?我发到msdnmg@microsoft.com 去了,麻烦查收下, 可以给我个邮箱地址么? 我邮箱是yesl2006@hotmail.com
    谢谢!
    2011年11月1日 11:42
  • 这大部分都是头文件定义不对, 看你的报错,应该是没有include <iostream>

    或者是使用的时候应该加上using namespace std


    0xBAADF00D
    2011年11月2日 2:48
    版主
  • WINAPI ??

     

    头文件知道?

    • 已标记为答案 Honny_yeyh 2011年11月3日 12:48
    2011年11月2日 15:14