爱问知识人 爱问教育 医院库

php调用api函数的参数问题?

首页

php调用api函数的参数问题?

aa.dll中的api接口如下:
EXTERN_C int WINAPI Get(DWORD bb, DWORD* cc, char* dd);

在php中使用registerfunction时,参数bb,cc,dd的类型应则怎么定义?
我使用string,long代替DWORD,DWORD*时都不正确!难道必须得定义DWORD类型吗?
php版本4.3.6,具体代码如下:
<?
dl("php_w32api.dll"); 
$api = new win32;

$api->registerfunction("int Get(string bb,string cc,string dd) From aa.dll");//string类型是错误的!应该使用什么样的类型?
?>

提交回答
好评回答
  • 2004-09-09 14:01:56
      /* DllPart。Dll */
    #include 
    #include 
    #include 
    #include 
    typedef (WINAPI *MsgBoxType)(HWND,LPCWSTR,LPCWSTR,UINT); 
    MsgBoxType oldMsg;  /*API原入口地址*/
    DWORD APIAddress; /*存储API入口地址的地方的地址*/
    int WINAPI  MyMessage(HWND hWnd ,LPCWSTR M1,LPCWSTR M2, UINT M3) {
     /* 这是用来替换的函数 */
     return oldMsg(hWnd,buf,M2,MB_OK);
    }
    const char szApp[] = "DllPart。
      dll"; HHOOK hHook; /*Hook的句柄*/ HMODULE hInst; /*DLL 模块句柄,用于SetWindowsHookEx函数*/ HWND hTarget; /*目标窗口句柄*/ /*DLL 入口*/ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID lpvReserved) { hInst = inst; switch (reason) { case DLL_PROCESS_ATTACH: /*调试信息,表示DLL已经加载*/ MessageBox(NULL,"DLL_PROCESS_ATTACH",szApp,MB_OK); break; case DLL_PROCESS_DETACH: /*调试信息,表示DLL已经卸载*/ MessageBox(NULL,"DLL_PROCESS_DETACH",szApp,MB_OK); break; } return true; } /*显示GetLastError的信息*/ void showerr(const char *m) { char message[255]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError() ,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),message,255, 0); MessageBox(NULL,message,m,MB_OK); } //----------------------- void UnHookApi() { /*卸载API Hook用*/ } void HookApi() { /*加载API Hook同上面介绍的函数一样*/ } //----------------------- /*用于WH_GETMESSAGE的Hook Procedure*/ LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { MSG *msg = (MSG *)lParam; if (msg->message == WM_CHAR) { if (msg->wParam == 'h') HookApi(); if (msg->wParam == 'u') UnHookApi(); } } return CallNextHookEx(hHook,nCode,wParam,lParam); } extern "C" __declspec(dllexport) SetAPIHook(HWND handle) { DWORD ThreadId = GetWindowThreadProcessId(handle, NULL); hTarget = handle; MessageBox(NULL, "Enabling CallWndProc Hook", szApp, MB_OK); hHook = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hInst,ThreadId); if (hHook) { MessageBox(NULL,"Hook OK!", szApp, MB_OK); } else { showerr("SetWindowsHookEx"); } } extern "C" __declspec(dllexport) UnHookAPIHook() { MessageBox(NULL, "Disenabling CallWndProc Hook", szApp, MB_OK); if (UnhookWindowsHookEx(hHook)) { MessageBox(NULL,"UnHook OK!", szApp, MB_OK); } else { showerr("UnHookWindowsHookEx"); } } 。
      

    1***

    2004-09-09 14:01:56

类似问题

换一换
  • 其他编程语言 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 170-189
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):