CoCreateInstance возвращает E_INVALIDARG

Я работал над упаковкой WindowsPortableDevice Api для Golang. Код C ++ ниже работал, но вдруг не работает.

libgowpd.h:

#include <Windows.h>

typedef struct IPortableDeviceManager IPortableDeviceManager;

HRESULT createPortableDeviceManager(IPortableDeviceManager **pPortableDeviceManager);

libgowpd.cpp:

#include <libgowpd.h>

HRESULT createPortableDeviceManager(IPortableDeviceManager **pPortableDeviceManager) {
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (SUCCEEDED(hr)) {
hr = CoCreateInstance(CLSID_PortableDeviceManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(pPortableDeviceManager));
}

return hr;
}

На Голанге

/*
#cgo CFLAGS: -blahblah
#cgo LDFLAGS: -llibgowpd -Ole32

include "libgowpd.h"*/
import "C"
type HRESULT uint64
type IPortableDeviceManager C.IPortableDeviceManager

func CreatePortableDeviceManager() (*IPortableDeviceManager, error) {
var pPortableDeviceManager *C.struct_IPortableDeviceManager// No matter whether C.IPortableDeviceManager or C.struct_IPortableDeviceManager

hr := C.createPortableDeviceManager(&pPortableDeviceManager)

if hr < 0 {
return nil, HRESULT(hr)
}
if pPortableDeviceManager == nil {
return nil, E_POINTER
}

log.Println("CreatePortableDeviceManager(): Create portable device manager instance.")

return (*IPortableDeviceManager)(pPortableDeviceManager), nil
}

Я думаю, что я передаю указатель на pPortableDeviceManager правильно, получив адрес pPortableDeviceManager но возвращается 0x80070057 код ошибки(E_INVALIDARG).

Что я сделал не так?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]