UWP无法调用C ++ DLL中具有CreateMailslot函数的api

时间:2018-12-05 09:01:52

标签: winapi uwp windows-10-iot-core

到UWP App的C ++ DLL“ DllImport”。
UWP称为此API。
DLL中的API:

    int CreateSingletonMutex(HANDLE *phSingletonMutex)
    {
        Singleton_mutex_t *pSingletonMutex;

        do{
            pSingletonMutex = (Singleton_mutex_t*)mem_malloc(sizeof(Singleton_mutex_t), DEFAULT_ALIGN_SIZE);
            if (pSingletonMutex == NULL)
            {
                break;
            }

            memset(pSingletonMutex, 0x0, sizeof(Singleton_mutex_t));

            LPTSTR SlotNameThis = TEXT("\\\\.\\mailslot\\mailslot_ct_maincore");
            pSingletonMutex->critSec = INVALID_HANDLE_VALUE;
            SECURITY_DESCRIPTOR sd;
            InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
            SetSecurityDescriptorDacl(&sd, true, NULL, false);

            SECURITY_ATTRIBUTES sa;
            sa.lpSecurityDescriptor=&sd;
            sa.bInheritHandle=false;
            pSingletonMutex->critSec = CreateMailslot(SlotNameThis, 0, 100, &sa);

            if (pSingletonMutex->critSec == INVALID_HANDLE_VALUE)
            {
                int ret = GetLastError();
                mem_free(pSingletonMutex, DEFAULT_ALIGN_SIZE);
                pSingletonMutex = NULL;
            }

        } while (0);

        *phSingletonMutex = pSingletonMutex;

        return 0;
    }

无法调用此api,GetLastError = 5,表示“访问被拒绝”。
我在Win10 IoTCore中部署了该uwp应用。

1 个答案:

答案 0 :(得分:1)

定位到通用Windows平台时,CreateMailslot API不可用。 Requirements部分记录了以下内容:

  
      
  • 支持的最低客户端:Windows 2000 Professional [仅桌面应用]
  •   
  • 支持的最低服务器:Windows 2000 Server [仅桌面应用]
  •   

您将不得不找到一种通用的Windows平台(例如Interprocess Communications)中可用的Pipes实现方式。