我有一个dll文件,其接口信息里有一些数据我想把它取出来,不知道如何做,我是新手请多指教!
数据是以数据结构形式给出的,具体如下:
//(数据结构RCV_WORK_SENDMSG)
typedef struct tagRCV_REPORT_STRUCTExV2
{
WORD m_cbSize; // 结构大小
time_t m_time;
WORD m_wMarket;
。
。
。
} RCV_REPORT_STRUCTExV2;
数据是以数据结构形式给出的,具体如下:
//(数据结构RCV_WORK_SENDMSG)
typedef struct tagRCV_REPORT_STRUCTExV2
{
WORD m_cbSize; // 结构大小
time_t m_time;
WORD m_wMarket;
。
。
。
} RCV_REPORT_STRUCTExV2;
RCV_REPORT->WORD
几个导出函数. 你的意思可能是想在客户端,获取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...
}
::FreeLibary(h);
}在Your_Client_Func()中,我主要是定义一个函数指针,用来接收dll中导出函数
的地址. 然后通过LoadLibrary() 载入dll, 再..哦,呵呵,不好意思,上面丢了
点东西: =reint..(GetProcAddress(h,"Your_inDll_Func_name"));
再GetprocAddress()获取dll中的导出函数的地址. 再然后就获取返回的struct指针拉. 有了指针,就有了一切拉.
要复制DLL的一个结构实例,只要EXE传过去一个指针p,然后DLL导出函数直接给*p符值不就行了吗。都是同一个进程里的,没有权限问题。