因為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等。同樣的調用者也是