程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 迭代器-DLL接口參數問題!如何傳遞復雜的參數?

迭代器-DLL接口參數問題!如何傳遞復雜的參數?

編輯:編程解疑
DLL接口參數問題!如何傳遞復雜的參數?

因為DLL形參不能用STL和復雜的參數,但有時又必需用到。像以下DLL函數有沒有什麼好辦法來修改?感謝各位高人指點,本人新手。

DLL裡的函數

 //取進程模塊信息
BOOL GetProcessModular(DWORD ProcessId, std::vector<MODULEENTRY32> &sPm)
{
    HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);//給指定進程拍個快照
    if (hProcessSnap == INVALID_HANDLE_VALUE) { return FALSE; }                    //取快照失敗

    MODULEENTRY32 pe32;                                                           //定義結構變量
    pe32.dwSize = sizeof(pe32);                                                   //設置它的大小
    BOOL bMore = ::Module32First(hProcessSnap, &pe32);                            //取進程第一個模塊

    while (bMore)
    {
        sPm.push_back(pe32);                                                     //將模塊信息加入迭代器
        bMore = ::Module32Next(hProcessSnap, &pe32);                             //取進程下一個模塊
    }

    ::CloseHandle(hProcessSnap);                                                //關閉對象
    return TRUE;
}

EXE調用

  std::vector<MODULEENTRY32> sPm;

    GetProcessModular(ProcessId,sPm);

    typedef std::vector<MODULEENTRY32> tVector;

    for (tVector::iterator i = sPm.begin(); i != sPm.end(); ++i)
    {
        AddText(this, IDC_EDIT3, i->szModule);//輸出函數
    }

最佳回答:


你可以傳遞void*等指針,只要調用和被調用者遵守約定,保證這個指針的合法性,DLL內部可以把它轉換會vector等。同樣的調用者也是

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved