⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadapi.odl

📁 VB圣经
💻 ODL
字号:
[
    uuid(F2904140-C83D-11D3-BC25-D41203C10000),
    helpstring("VBoost: API declares used for threading"),
    lcid(0x0),
    version(1.0)
] 

library ThreadingAPIs
{  
    importlib("stdole2.tlb");
    importlib("VBoostTypes6.olb");
    typedef VBGUID* REFGUID;
    typedef VBGUID* REFIID;
    typedef VBGUID* REFCLSID;
    typedef enum
    {
        PM_NOREMOVE = 0,
        PM_REMOVE = 1,
        PM_NOYIELD = 2
    } PMOptions;
    typedef enum 
    {
      CLSCTX_INPROC_SERVER   = 1, 
      CLSCTX_INPROC_HANDLER  = 2,     
      CLSCTX_LOCAL_SERVER    = 4, 
      CLSCTX_REMOTE_SERVER   = 16
    } CLSCTX;

    typedef struct 
    {
      long DebugInfo;
      long LockCount;
      long RecursionCount;
      long OwningThread;
      long LockSemaphore;
      long SpinCount;
    } CRITICAL_SECTION;
    typedef [public] long LPCRITICAL_SECTION;

    typedef struct
    {
        HWND hWnd;
        UINT Message;
        WPARAM wParam;
        LPARAM lParam;
        DWORD dwTime;
        long ptX;
        long ptY;
    } MSG;

    interface IMessageFilter;
    [dllname("ole32.dll")]
    module Ole32
    {
      [entry("CoMarshalInterThreadInterfaceInStream")] HRESULT CoMarshalInterThreadInterfaceInStream([in] REFIID riid, [in] stdole.IUnknown* pUnk, [out,retval] long* ppStm);
      [entry("CoGetInterfaceAndReleaseStream")] HRESULT CoGetInterfaceAndReleaseStream([in] long pStm, [in] REFIID riid, [out,retval] stdole.IUnknown** ppUnk);
      [entry("CoInitialize")] long CoInitialize ([in] long pvReserved);
      [entry("CoUninitialize")] long CoUninitialize ();
      [entry("CoCreateInstance")] long CoCreateInstance([in] REFCLSID clsid, [in] IUnknown* pUnkOuter, [in] CLSCTX dwClsContext, [in] REFIID riid, [out] stdole.IUnknown** pvObj);
      [entry("CoRegisterMessageFilter")] HRESULT CoRegisterMessageFilter([in] IMessageFilter* pNewMessageFilter, [out,retval] IMessageFilter** ppOldMessageFilter);
    }
    [dllname("kernel32")]
    module Kernel32
    {
      const long CREATE_SUSPENDED = 0x00000004;
      const long INFINITE = 0xFFFFFFFF;
      const long DUPLICATE_SAME_ACCESS = 0x00000002;
      const long STILL_ACTIVE = 0x00000103;
      [entry("WaitForSingleObject")] long WaitForSingleObject ([in] HANDLE hHandle, [in] long dwMilliseconds);
      [entry("CreateEventA"), usesgetlasterror] HANDLE CreateEvent ([in] long lpEventAttributes, [in] long bManualReset, [in] long bInitialState, [in] LPSTR lpName);
      [entry("CloseHandle")] long CloseHandle ([in] HANDLE hOjbect);
      [entry("PulseEvent")] long PulseEvent ([in] HANDLE hEvent);
      [entry("SetEvent")] long SetEvent ([in] HANDLE hEvent);
      [entry("ResetEvent")] long ResetEvent ([in] HANDLE hEvent);
      [entry("ResumeThread")] long ResumeThread ([in] HANDLE hThread);
      [entry("SuspendThread")] long SuspendThread ([in] HANDLE hThread);
      [entry("InterlockedIncrement")] long InterlockedIncrement([in] long pLong);
      [entry("InterlockedDecrement")] long InterlockedDecrement([in] long pLong);
      [entry("WaitForMultipleObjects")] long WaitForMultipleObjects ([in] long nCount, [in,out] HANDLE* lpHandles, [in] BOOL bWaitAll, [in] long dwMilliseconds);
      [entry("GetCurrentThreadId")] long GetCurrentThreadId ();
      [entry("GetCurrentProcessId")] long GetCurrentProcessId ();
      [entry("GetCurrentProcess")] HANDLE GetCurrentProcess();
      [entry("CreateThread")] HANDLE CreateThread ([in] long lpSecurityAttributes, [in] long dwStackSize, [in] long lpStartAddress, [in] long lpParameter, [in] long dwCreationFlags, [in,out] long* lpThreadId);
      [entry("Sleep")] void Sleep([in] long dwMilliSeconds);
      [entry("InitializeCriticalSection")] void InitializeCriticalSection([in] LPCRITICAL_SECTION lpCriticalSection);
      [entry("DeleteCriticalSection")] void DeleteCriticalSection([in] LPCRITICAL_SECTION lpCriticalSection);
      [entry("EnterCriticalSection")] void EnterCriticalSection([in] LPCRITICAL_SECTION lpCriticalSection);
      [entry("LeaveCriticalSection")] void LeaveCriticalSection([in] LPCRITICAL_SECTION lpCriticalSection);
      [entry("DuplicateHandle")] BOOL DuplicateHandle([in] HANDLE hSourceProcessHandle, [in] HANDLE hSourceHandle, [in] HANDLE hTargetProcessHandle, [out] HANDLE* lpTargetHandle, [in,defaultvalue(0)] DWORD dwDesiredAccess, [in, defaultvalue(0)] BOOL bInheritHandle, [in,defaultvalue(2)] DWORD dwOptions);
      [entry("GetExitCodeThread")]BOOL GetExitCodeThread([in] HANDLE hThread, [out] DWORD *lpExitCode);
      //[entry("OutputDebugStringW")] void ODS([in] LPWSTR lpOutputString);
    }
    [dllname("user32")]
    module User32
    {
        [entry("PeekMessageA")] BOOL PeekMessage([in] MSG* lpMsg, [in] HWND hWnd, [in] UINT wMsgFilterMin, [in] UINT wMsgFilterMax, [in] PMOptions wRemoveMsg);
        [entry("TranslateMessage")] BOOL TranslateMessage([in] MSG* lpMsg);
        [entry("DispatchMessageA")] long DispatchMessage([in] MSG* lpMsg);
        [entry("EnumThreadWindows")] BOOL EnumThreadWindows([in] DWORD dwThreadId, [in] long lpfn, [in] LPARAM lParam);
        [entry("GetClassNameA")] long GetClassNameA([in] HWND hWnd, [in] LPSTR lpClassName, [in]long nMaxCount);
        [entry("GetClassNameW")] long GetClassNameW([in] HWND hWnd, [in] LPWSTR lpClassName, [in]long nMaxCount);
        [entry("SetTimer")] UINT SetTimer([in] HWND hWnd, [in] UINT nIDEvent, [in] UINT uEleapse, [in] long lpTimerFunc);
        [entry("KillTimer")] BOOL KillTimer([in] HWND hWnd, [in] UINT nIDEvent);
    };

    typedef enum
    {   
        CALLTYPE_TOPLEVEL   = 1,
        CALLTYPE_NESTED = 2,
        CALLTYPE_ASYNC  = 3,
        CALLTYPE_TOPLEVEL_CALLPENDING   = 4,
        CALLTYPE_ASYNC_CALLPENDING  = 5
    } CALLTYPE;

    typedef enum
    {
        SERVERCALL_ISHANDLED    = 0,
        SERVERCALL_REJECTED = 1,
        SERVERCALL_RETRYLATER   = 2
    } SERVERCALL;

    typedef enum
    {
        PENDINGTYPE_TOPLEVEL    = 1,
        PENDINGTYPE_NESTED  = 2
    } PENDINGTYPE;

    typedef enum
    {
        PENDINGMSG_CANCELCALL   = 0,
        PENDINGMSG_WAITNOPROCESS    = 1,
        PENDINGMSG_WAITDEFPROCESS   = 2
    } PENDINGMSG;

    typedef struct
    {
        stdole.IUnknown*  pUnk;
        IID               iid;
        WORD              wMethod;
    } INTERFACEINFO;

    [
        uuid(00000016-0000-0000-C000-000000000046), odl
    ]
    interface IMessageFilter : IUnknown
    {
        SERVERCALL HandleInComingCall([in] CALLTYPE dwCallType, [in] HTASK htaskCaller, [in] DWORD dwTickCount, [in] INTERFACEINFO* lpInterfaceInfo);
        DWORD RetryRejectedCall([in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] SERVERCALL dwRejectType);
        PENDINGMSG MessagePending([in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] PENDINGTYPE dwPendingType);
    };
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -