我有一个dll文件,其接口信息里有一些数据我想把它取出来,不知道如何做,我是新手请多指教!
数据是以数据结构形式给出的,具体如下:
//(数据结构RCV_WORK_SENDMSG)
typedef struct tagRCV_REPORT_STRUCTExV2
{
WORD m_cbSize; // 结构大小
time_t m_time;
WORD m_wMarket;
                 。
                 。
                 。

} RCV_REPORT_STRUCTExV2;

解决方案 »

  1.   

    RCV_REPORT_STRUCTExV2 RCV_REPORT;
    RCV_REPORT->WORD
      

  2.   

    我是新手,不好意思,您能不能详细一点,举个例子。如显示 m_time 的值。谢谢
      

  3.   

    dll通常提供的是导出函数,无论是win32 dll,还是com dll,后者是固定的
    几个导出函数.  你的意思可能是想在客户端,获取dll的导出函数,并且给
    它(导出函数)传递这个struct,并且想获取.不知我理解的是否正确.我就按这种方式写段代码如下,希望对你有帮助:我假设在你的dll中,有个导出函数的返回值是上面的struct类型->
    RCV_REPORT_STRUCTExV2* Your_inDll_Func_name(void);//client:
    typedef struct tagRCV_REPORT_STRUCTExV2  //可以是全局的
    {
    WORD m_cbSize; time_t m_time; WORD m_wMarket;
                     。
                     。
                     。

    } RCV_REPORT_STRUCTExV2;void Your_Client_Func(void)
    {
     typedef RCV_REPORT_STRUCTExV2 *(_stdcall *CALL_DLL_FUNC)(void);
     HANDLE h=::LoadLibrary("yourDll.dll");
     CALL_DLL_FUNC proc= reinterpret_cast<CALL_DLL_FUNC>(h,"Your_inDll_Func_name"); RCV_REPORT_STRUCTExV2 rcv_result=(*proc)();//  do other some thing...
    }
      

  4.   

    哦,在 do other some thing...之后,要freelibrary://  do other some thing...
    ::FreeLibary(h);
    }在Your_Client_Func()中,我主要是定义一个函数指针,用来接收dll中导出函数
    的地址. 然后通过LoadLibrary() 载入dll, 再..哦,呵呵,不好意思,上面丢了
    点东西: =reint..(GetProcAddress(h,"Your_inDll_Func_name"));
    再GetprocAddress()获取dll中的导出函数的地址. 再然后就获取返回的struct指针拉. 有了指针,就有了一切拉.
      

  5.   

    呵呵,上面是我假设的情形,只是给出整个过程的主要步骤.你没有把dll的和client的代码贴出来,我怎么能写出可执行代码?但,估计问题不大,按上面的路子来,应可以ok的. try again.
      

  6.   

    不用这么复杂吧?
    要复制DLL的一个结构实例,只要EXE传过去一个指针p,然后DLL导出函数直接给*p符值不就行了吗。都是同一个进程里的,没有权限问题。
      

  7.   

    to: icelight(icelight)说的对,我上面的代码就是这么去实现的.